如何在ASP.NET MVC的〜/ Views文件夹下请求静态.html文件?

我希望能够请求位于~/Views文件夹中的静态.html文件。 根据文档,路由系统在评估应用的路由之前检查URL是否与磁盘文件匹配。

但是,当我要求文件404错误出现。

我的文件位于〜/ Views文件夹中。 URL是: http://[localhost]/Views/HtmlPage1.html

我错过了什么?

我希望能够请求位于“〜/ Views”文件夹中的静态.html文件。

你不能。 在这个文件夹中有一个web.config文件,它明确禁止从中访问任何文件。 如果你想能够从客户端访问文件,这些文件不应该被放置在ASP.NET MVC中具有特殊意义的Views文件夹中。

你可以有一个~/Static文件夹,你可以放置你的HTML文件。 然后像这样访问它:

 http://example.com/yourapplicationname/static/foo.html 

在Views文件夹中允许像js和html这样的文件在视图中编辑web.config-Folder:

 <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文件。

那么你可以。 标记的答案不完全正确,虽然它提供了一个解决scheme。

标记答案中的推理是正确的,在Views文件夹中的web.config(BlockViewHandler设置是特定的)可以防止文件被直接访问。 它是为了保护Asp.Net MVC中的视图。 但是如果你问了一个关于直接提供这些文件的问题,那么你可能有一个合理的理由去做,比如使用AngularJS局部视图(在我们的例子中),我们不想复制视图文件夹中奇怪的名字。

所以这里是一个非常简单的调整,你可以在Views文件夹中findweb.config文件,而不会影响你的asp.net mvc视图的安全性。 这将像往常一样确保.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" /> 

另一个备选scheme是在任何所需的控制器中插入一个操作方法来提供html文件

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

访问html为http:// yoursite / controller / MyHtml 。 你可以扩展这个动作方法来接受html文件名作为方法/ querystrign参数,并在运行时渲染文件,例如像这样。

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