web-dev-qa-db-ja.com

httpcontext.current.server.mappathオブジェクト参照がオブジェクトのインスタンスに設定されていません

クラス内で次のコードを使用しています。

string filePath = HttpContext.Current.Server.MapPath("~/email/teste.html");

ファイルteste.htmlはフォルダー内にあります

ただし、ファイルを開くと、次のエラーが生成されます。

オブジェクト参照がオブジェクトインスタンスに設定されていません。

34
soamazing

Server.MapPathを使用しないでください。遅いです。代わりにこれを使用してください、HttpRuntime.AppDomainAppPath。 Webサイトが実行されている限り、このプロパティは常に利用可能です。

次に、次のように使用します。

string filePath = Path.Combine(HttpRuntime.AppDomainAppPath, "email/teste.html");
74
nickytonline

コードがスレッド内から実行されていない場合、httprequestを実行している場合、HttpContext.Currentnullです(たとえば、メソッドがBeginInvokeを介して呼び出される場合)- http://forums.asp.net/t/1131004.aspx/1 を参照してください=。

常に使用できますHttpRuntime see http://msdn.Microsoft.com/en-us/library/system.web.httpruntime.aspx

7
Yahia

HttpContextがない場合(たとえば、Yahiaが指摘したようにBeginInvokeを介してメソッドが呼び出された場合)、HttpContext.Current.Server.MapPath()の呼び出しは失敗する必要があります。これらのシナリオでは、_System.Web.Hosting_名前空間にHostingEnvironment.MapPath()があります。

_string filePath = HostingEnvironment.MapPath("~/email/teste.html");
_
4
The Conspiracy