47

ASP.NET MVC 4 アプリケーションのルート ディレクトリに対する相対パスを解決するにはどうすればよいですか? つまり、 のように参照されるコントローラ アクションから、アプリケーションに属するファイルを開きたいと考えています~/Data/data.html。これらのパスは通常、 で指定されWeb.configます。

編集:

「解決」とは、アプリケーションのルート ディレクトリからの相対パスを絶対パス (.eg ~/Data/data.html→ ) に変換することを意味しますC:\App\Data\Data.html

4

5 に答える 5

85

絶対パスを取得するには、次を使用します。

String path = HttpContext.Current.Server.MapPath("~/Data/data.html");

編集:

コントローラのコンテキストを取得するに.Currentは、上記の行から削除します。単独で使用HttpContextすることにより、コントローラーのコンテキストに基づいているため、テストが容易になり、よりローカライズされます。

Server.MapPath私は今、どのように機能するか(内部的には最終的には呼び出す)が嫌いであることに気付きました。そのため、もちろん必要な場合を除いて、静的でコンテキストに依存しないため、HostingEnvironment.MapPath常に使用することをお勧めします...HostingEnvironment.MapPath

于 2012-09-02T19:30:52.823 に答える
64

このコードは、Global.asax.cs でコンポーネントを初期化するときなど、コントローラーの外部のパスが必要な場合に役立ちます。

HostingEnvironment.MapPath("~/Data/data.html")
于 2013-03-26T21:20:25.093 に答える
15

以下を使用するだけです

Server.MapPath("~/Data/data.html")
于 2013-01-28T21:07:44.680 に答える
4

アクションでは、次を呼び出すことができます。

this.Request.PhysicalPath

これは、現在のコントローラーを参照して物理パスを返します。ルート パス呼び出しのみが必要な場合:

this.Request.PhysicalApplicationPath
于 2012-09-02T19:30:10.410 に答える