フォルダに.html
ある静的ファイルをリクエストできるようにしたい~/Views
。ドキュメントによると、ルーティングシステムは、アプリケーションのルートを評価する前に、URLがディスクファイルと一致するかどうかを確認します。
しかし、ファイルを要求すると404
エラーが発生します。
私のファイルは〜/ Viewsフォルダーにあります。URLは次のとおりです。http://[localhost]/Views/HtmlPage1.html
私は何を逃したのですか?
フォルダに.html
ある静的ファイルをリクエストできるようにしたい~/Views
。ドキュメントによると、ルーティングシステムは、アプリケーションのルートを評価する前に、URLがディスクファイルと一致するかどうかを確認します。
しかし、ファイルを要求すると404
エラーが発生します。
私のファイルは〜/ Viewsフォルダーにあります。URLは次のとおりです。http://[localhost]/Views/HtmlPage1.html
私は何を逃したのですか?
回答:
「〜/ Views」フォルダにある静的な.htmlファイルをリクエストできるようにしたい。
できません。このフォルダーには、そこからのファイルへのアクセスを明示的に禁止するweb.configファイルがあります。クライアントからファイルにアクセスできるようにする場合は、それらのファイルViews
をASP.NET MVCで特別な意味を持つフォルダーに配置しないでください。
あなたは持っている可能性があり~/Static
、あなたのHTMLファイルを置くことができるフォルダを。そして、そのようにそれにアクセスします:
http://example.com/yourapplicationname/static/foo.html
jsやhtmlなどのファイルをViewsフォルダーで許可するには、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;
}