Esmalt kleebi kood, et saada veebisaidi kataloogifail, järgmiselt:
Pärast selle lause käivitamist visatakse erand, mis ütleb, et objekt on tühi, nagu alloleval joonisel näidatud:
Miks ma saan nulli?
Sest lõim, mis seda koodi käivitab, ei ole praegune lõim, mis käsitleb praegust päringut
Miks see ei ole null, kui sa selle mujalt saad?
See on tingitud sellest, et ASP.NET programm on juba seadistanud HttpContext objekti omaduseks System.Runtime.Remoting.Messaging.CallContext.HostContext enne sinu koodi kutsumist.
HttpApplicationil on sisemine meetod OnThreadEnter(), ASP. .NET kutsub seda meetodit HttpContexti vahetamiseks enne välise koodi kutsumist, näiteks iga kord, kui torujuhtme sündmuste käsitleja käivitatakse või kui sünkroniseerimiskontekst (AspNetSynchronizationContext) täidab tagasikutse. Pärast lõime CallContext.HostContext omaduse vahetamist pääseb meie kood ligi HttpContext viitele. Märkus: Viide HttpContextile on tegelikult salvestatud HttpApplication objektis.
Kuidas sellisel juhul faili absoluutset rada saada?
Saame ligi System.Web.HttpRuntime.AppDomainAppPath lehele, et saada programmi juurtee, ja seejärel ühendada faili suhtelised teed
|