.html
フォルダーにある静的~/Views
ファイルを要求できるようにします。ドキュメントによると、ルーティングシステムは、アプリケーションのルートを評価する前に、URLがディスクファイルと一致するかどうかを確認します。
しかし、ファイルを要求すると、404
エラーが発生します。
私のファイルは〜/ Viewsフォルダーにあります。 URLはhttp://[localhost]/Views/HtmlPage1.html
です
私は何を見逃しましたか?
'〜/ Views'フォルダーにある静的.htmlファイルを要求できるようにしたい。
できません。このフォルダにはweb.configファイルがあり、そこからのファイルへのアクセスを明示的に禁止しています。クライアントからファイルにアクセスできるようにする場合、ASP.NET MVCで特別な意味を持つViews
フォルダーにそれらのファイルを配置しないでください。
HTMLファイルを配置できる~/Static
フォルダーを作成できます。そして、そのようにアクセスします:
http://example.com/yourapplicationname/static/foo.html
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>
〜/ 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" />
別の代替オプションは、任意のコントローラーにアクションメソッドを挿入して、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;
}
ビューフォルダー内で使用する場合は、上記の回答が最適ですが、この回答はasp.net mvcコアに移行するユーザーに役立つ場合があります。ビューフォルダーではなくwwwrootにファイルを配置すると、htmlページがlocalhost/myfile.htmlとして簡単にアクセスできるようになります。