255

Microsoft Web APIMVCではないため、次のようなことはできません。

var a = Request.MapPath("~");

これも

var b = Server.MapPath("~");

これらはSystem.Web名前空間ではなく、名前空間の下にあるためSystem.Web.Httpです。

では、 Web APIで相対サーバー パスをどのように把握するのでしょうか。私はMVC
でこのようなことをしていました:

var myFile = Request.MapPath("~/Content/pics/" + filename);

これにより、ディスク上の絶対パスが得られます。

"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
4

8 に答える 8

495

HostingEnvironment.MapPathSystem.Webなどのオブジェクトが使用できない任意のコンテキストでHttpContext.Current使用できます (たとえば、静的メソッドからも)。

var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/SomePath");

Server.MapPath と HostingEnvironment.MapPath の違いは何ですか?も参照してください。

于 2013-05-15T05:01:00.063 に答える
2

これに出くわした人への余談ですが、HostingEnvironment 呼び出しを使用してテスト レベルを実行する良い方法の 1 つは、たとえば UNC 共有にアクセスする場合です: \example\ にマップされている ~/example/ あなたはこれを実行して回避することができますIIS-Express の問題:

#if DEBUG
    var fs = new FileStream(@"\\example\file",FileMode.Open, FileAccess.Read);
#else
    var fs = new FileStream(HostingEnvironment.MapPath("~/example/file"), FileMode.Open, FileAccess.Read);
#endif

ファイルをローカルでテストする権利があるが、本番環境で一度 env マッピングが必要な場合に役立ちます。

于 2015-05-12T16:19:48.330 に答える
1

あなたが提供するコンテキストからはわかりませんが、それがアプリの起動時に行う必要があるだけの場合は、引き続きServer.MapPathin WebApiHttpApplication;を使用できます。例えばApplication_Start()

私はあなたの直接の質問に答えているだけです。すでに述べたHostingEnvironment.MapPath()ことがおそらく好ましい解決策です。

于 2013-05-15T13:17:56.470 に答える
-1

選択した回答は、Web API アプリケーションでは機能しませんでした。私は使用しなければならなかった

System.Web.HttpRuntime.AppDomainAppPath
于 2017-10-20T22:22:06.617 に答える