Nejprve vložte kód a získejte soubor adresáře webu, následovně:
Po spuštění této věty bude vyhozena výjimka, která říká, že objekt je prázdný, jak je znázorněno na obrázku níže:
Proč dostávám null?
Protože vlákno, které tento kód spouští, není aktuálním vláknem, které zpracovává aktuální požadavek
Proč to není null, když to dostaneš jinde?
Je to proto ASP.NET že program už před zavoláním kódu nastavil objekt HttpContext na vlastnost System.Runtime.Remoting.Messaging.CallCallContext.HostContext.
HttpApplication má interní metodu OnThreadEnter(), ASP. .NET volá tuto metodu k přepnutí HttpContext před vyvoláním externího kódu, například kdykoli je vykonán handler událostí pipeline, nebo když synchronizační kontext (AspNetSynchronizationContext) vykoná callback. Po přepnutí vlastnosti CallContext.HostContext vlákna může náš kód přistupovat k odkazu na HttpContext. Poznámka: Odkaz na HttpContext je ve skutečnosti uložen v objektu HttpApplication.
Jak v tomto případě získat absolutní cestu souboru?
Můžeme přistupovat k System.Web.HttpRuntime.AppDomainAppPath a získat kořenovou cestu programu, a poté spoj relativní cesty souboru
|