我希望能够请求位于.html
文件夹中的静态~/Views
文件。
根据文档,路由系统在评估应用程序的路由之前检查URL是否与磁盘文件匹配。
但是当我请求文件时出现404
错误。
我的文件位于〜/ Views文件夹中。
该网址为:http://[localhost]/Views/HtmlPage1.html
我错过了什么?
答案 0 :(得分:102)
我希望能够请求位于'〜/ Views'文件夹中的静态.html文件。
你做不到。此文件夹中有一个web.config文件,它明确禁止从中访问任何文件。如果您希望能够从客户端访问文件,则不应将这些文件放在ASP.NET MVC中具有特殊含义的Views
文件夹中。
您可以在~/Static
文件夹中放置HTML文件。然后像这样访问它:
http://example.com/yourapplicationname/static/foo.html
答案 1 :(得分:71)
要在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>
答案 2 :(得分:31)
我希望能够请求位于的静态.html文件 〜/ Views文件夹。
嗯,你可以。明确的答案并不完全正确,尽管它提供了解决方案。
标记答案中的推理是正确的,它是Views文件夹中的web.config(具体的BlockViewHandler设置),可防止直接访问文件。它可以保护Asp.Net MVC中的视图。但是如果你问一个关于直接提供这些文件的问题,那么你可能有正当理由这样做,比如使用AngularJS部分视图(如我们的例子),我们不希望用奇怪的名称复制views文件夹。
所以这里是一个非常简单的调整,你可以在Views文件夹中找到的web.config文件中进行,而不会影响你的asp.net mvc视图的安全性。这将像往常一样保护.cshtml文件,但只保留.html文件.A
更改此
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
- 至 -
<add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
答案 3 :(得分:13)
另一个选择是在任何所需的控制器中插入一个动作方法来提供html文件
public ActionResult MyHtml()
{
var result = new FilePathResult("~/Views/HtmlPage1.html", "text/html");
return result;
}
以http://yoursite/controller/MyHtml的身份访问html。您可以扩展此操作方法以接受html文件名作为方法/ querystrign参数并在运行时呈现文件,例如:
public ActionResult MyHtml(string htmlPageName)
{
var result = new FilePathResult($"~/Views/{htmlPageName}.html", "text/html");
return result;
}
答案 4 :(得分:0)
如果您打算在内部视图文件夹中使用,以上答案应该是最好的,但是此答案对于要迁移到asp.net mvc core的用户可能有用。将文件放置在wwwroot而不是views文件夹中,应使您的html页面以localhost / myfile.html的身份轻松访问