Najprej prilepite kodo, da dobite datoteko imenika spletne strani, kot sledi:
Po izvajanju tega stavka se vrže izjema, ki pravi, da je objekt prazen, kot je prikazano na spodnji sliki:
Zakaj dobim null?
Ker nit, ki izvaja to kodo, ni trenutna nit, ki obravnava trenutno zahtevo
Zakaj ni ničelna, če jo dobiš drugje?
To je zato, ker je ASP.NET program že nastavil objekt HttpContext na lastnost System.Runtime.Redáling.Messaging.CallContext.HostContext, omenjeno prej pred klicem vaše kode.
HttpApplication ima notranjo metodo OnThreadEnter(), ASP. .NET kliče to metodo za preklapljanje HttpContexta pred klicem zunanje kode, na primer kadar se izvaja obravnava dogodkov cevovoda ali ko sinhronizacijski kontekst (AspNetSynchronizationContext) izvede povratni klic. Po zamenjavi lastnosti CallContext.HostContext v niti lahko naša koda dostopa do reference HttpContext. Opomba: Referenca na HttpContext je dejansko shranjena v objektu HttpApplication.
Kako v tem primeru dobiti absolutno pot datoteke?
Dostopamo do System.Web.HttpRuntime.AppDomainAppPath in dobimo korensko pot programa, in nato spoji relativne poti datoteke
|