Najprv vložte kód, aby ste získali súbor adresára webu, nasledovne:
Po spustení tejto vety sa vyhodí výnimka, že objekt je prázdny, ako je znázornené na obrázku nižšie:
Prečo dostávam null?
Pretože vlákno, ktoré spúšťa tento kód, nie je aktuálne vlákno, ktoré spracováva aktuálnu požiadavku
Prečo to nie je null, keď to získate inde?
Je to preto, že ASP.NET program už nastavil objekt HttpContext na vlastnosť System.Runtime.Remoting.Messaging.CallContext.HostContext spomenutú skôr pred zavolaním vášho kódu.
HttpApplication má internú metódu OnThreadEnter(), ASP. .NET volá túto metódu na prepínanie HttpContext pred zavolaním externého kódu, napríklad vždy, keď sa spustí obslužný modul udalostí pipeline alebo keď synchronizačný kontext (AspNetSynchronizationContext) vykoná spätné volanie. Po zmene vlastnosti CallContext.HostContext vo vlákne môže náš kód pristupovať k referencii HttpContext. Poznámka: Odkaz na HttpContext je v skutočnosti uložený v objekte HttpApplication.
Ako získať absolútnu cestu súboru v tomto prípade?
Môžeme pristupovať k System.Web.HttpRuntime.AppDomainAppPath a získať koreňovú cestu programu, a potom spojiť relatívne cesty súboru
|