web-dev-qa-db-ja.com

ASP.NET MVCの〜/ Viewsフォルダーにある静的.htmlファイルをどのように要求しますか?

.htmlフォルダーにある静的~/Viewsファイルを要求できるようにします。ドキュメントによると、ルーティングシステムは、アプリケーションのルートを評価する前に、URLがディスクファイルと一致するかどうかを確認します。

しかし、ファイルを要求すると、404エラーが発生します。

私のファイルは〜/ Viewsフォルダーにあります。 URLはhttp://[localhost]/Views/HtmlPage1.htmlです

私は何を見逃しましたか?

87
alex.mironov

'〜/ Views'フォルダーにある静的.htmlファイルを要求できるようにしたい。

できません。このフォルダにはweb.configファイルがあり、そこからのファイルへのアクセスを明示的に禁止しています。クライアントからファイルにアクセスできるようにする場合、ASP.NET MVCで特別な意味を持つViewsフォルダーにそれらのファイルを配置しないでください。

HTMLファイルを配置できる~/Staticフォルダーを作成できます。そして、そのようにアクセスします:

http://example.com/yourapplicationname/static/foo.html
103
Darin Dimitrov

Viewsフォルダーでjsやhtmlなどのファイルを許可するには、views-Folderでweb.configを編集します。

<system.webServer>
<handlers>
  <add name="JavaScriptHandler" path="*.js" verb="*"
     preCondition="integratedMode" type="System.Web.StaticFileHandler" />      
  <add name="HtmlScriptHandler" path="*.html" verb="*"
     preCondition="integratedMode" type="System.Web.StaticFileHandler" />
  <remove name="BlockViewHandler"/>
  <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
72
cs3x

〜/ Viewsフォルダーにある静的.htmlファイルを要求できるようにしたい。

できます。マークされた答えは完全に正しいわけではありませんが、解決策を提供します。

マークされた答えの理由は正しいです。ファイルに直接アクセスできないようにするのは、Viewsフォルダー内のweb.config(特定のBlockViewHandler設定)です。 Asp.Net MVCのビューを保護するためにあります。しかし、これらのファイルを直接提供することについて質問した場合、おそらく、AngularJS部分ビュー(この場合のように)を使用するなど、奇妙な名前のビューフォルダを複製したくないなど、そうする正当な理由があります。

したがって、asp.net mvcビューのセキュリティを損なうことなく、Viewsフォルダにあるweb.configファイルで実行できる非常に簡単な調整があります。これにより、通常どおり.cshtmlファイルが保護されますが、.htmlファイルはそのままにします。

これを変える

<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode"    type="System.Web.HttpNotFoundHandler" />

- に -

<add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
31
Vikas

別の代替オプションは、任意のコントローラーにアクションメソッドを挿入して、htmlファイルを提供することです。

public ActionResult MyHtml()
{
    var result = new FilePathResult("~/Views/HtmlPage1.html", "text/html");
    return result;
}

http:// yoursite/controller/MyHtml としてhtmlにアクセスします。このアクションメソッドを拡張して、htmlファイル名をmethod/querystrignパラメーターとして受け入れ、実行時にファイルをレンダリングすることができます。たとえば、次のようになります。

 public ActionResult MyHtml(string htmlPageName)
 {
      var result = new FilePathResult($"~/Views/{htmlPageName}.html", "text/html");
      return result;
 }
13

ビューフォルダー内で使用する場合は、上記の回答が最適ですが、この回答はasp.net mvcコアに移行するユーザーに役立つ場合があります。ビューフォルダーではなくwwwrootにファイルを配置すると、htmlページがlocalhost/myfile.htmlとして簡単にアクセスできるようになります。

0
Kurkula