Fügen Sie zuerst den Code ein, um die Website-Verzeichnisdatei wie folgt zu erhalten:
Nachdem dieser Satz ausgeführt wurde, wird eine Ausnahme geworfen, die besagt, dass das Objekt leer ist, wie in der Abbildung unten gezeigt:
Warum bekomme ich null?
Weil der Thread, der diesen Code ausführt, nicht der aktuelle Thread ist, der die aktuelle Anfrage verarbeitet
Warum ist es nicht null, wenn man es woanders bekommt?
Das liegt daran, dass ASP.NET Programm das zuvor erwähnte HttpContext-Objekt bereits auf die zuvor erwähnte Eigenschaft System.Runtime.Remoting.Messaging.CallContext.HostContext gesetzt hat, bevor es Ihren Code aufruft.
HttpApplication hat eine interne Methode namens OnThreadEnter(), ASP. .NET ruft diese Methode auf, um den HttpContext zu wechseln, bevor externer Code aufgerufen wird, zum Beispiel wenn der Ereignishandler der Pipeline ausgeführt wird oder wenn der Synchronisationskontext (AspNetSynchronizationContext) einen Callback ausführt. Nachdem wir die Eigenschaft CallContext.HostContext des Threads geändert haben, kann unser Code auf die HttpContext-Referenz zugreifen. Hinweis: Der Verweis auf den HttpContext wird tatsächlich im HttpApplication-Objekt gespeichert.
Wie bekommt man in diesem Fall den absoluten Pfad der Datei?
Wir können auf System.Web.HttpRuntime.AppDomainAppPath zugreifen, um den Root-Pfad des Programms zu erhalten, und dann die relativen Pfade der Datei zusammenschneiden
|