Server.MapPathとHostingEnvironment.MapPathの違いは何ですか?


174

とに違いはServer.MapPath()ありHostingEnvironment.MapPath()ますか?んServer.MapPath()を超える任意の利点を持っていますかHostingEnvironment.MapPath()

私の元の問題は、サーバーにファイルパスHttpContextが存在せず、Serverそこから変数をGlobal.asaxメソッドに渡せない場合にマッピングすることでした。

HostingEnvironment.MapPath()必要ないので代わりに使いましたHttpContext。これら2つの方法で異なる結果が得られる状況はありますか?

回答:


204

Server.MapPath()最終的にを呼び出しますが、特定のオプションHostingEnvironment.MapPath()を持つVirtualPathオブジェクトを作成します。

VirtualPath渡されるオブジェクトHostingEnvironment.MapPath()は次のように構築されます:

VirtualPath.Create(path, VirtualPathOptions.AllowAllPath|VirtualPathOptions.AllowNull);

編集:実際には、唯一の違いはnullをに渡すことが許可されているがServer.MapPath()HostingEnvironment.MapPath()


2
だから私は常に両方の方法から同じ結果を得るでしょう?(null引数を除く)
09年

61
TL; DR:常にHostingEnvironment.MapPath()正気を保つために使用します。(+1)
Chris Marisic

15
Server.MapPath("myFolder")正常に動作するため、null以外の何かがあるはずですが、HostingEnvironmentで同じ結果を得るには、を使用する必要がありましたHostingEnvironment.MapPath("~/myFolder")
スタイフル

Webサービスの呼び出しを介してFTPセッションを開始するための素晴らしい答え。今日私を大きく救った!!!
htm11h 14

10
実際には別の違いがあります-相対パス(Image / pict.pngなど)はHostingEnvironment.MapPathでは許可されていません。
NetMage 2014

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.