95

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

但是当我请求该文件时,404会出现错误。

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

我错过了什么?

4

6 回答 6

113

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

你不能。此文件夹中有一个 web.config 文件,它明确禁止从中访问任何文件。如果您希望能够从客户端访问文件,则不应将这些文件放在Views在 ASP.NET MVC 中具有特殊含义的文件夹中。

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

http://example.com/yourapplicationname/static/foo.html
于 2013-07-30T14:13:46.607 回答
79

要允许视图文件夹中的 js 和 html 等文件,请编辑视图文件夹中的 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>

于 2014-09-06T05:24:37.013 回答
31

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

好吧,你可以。标记的答案并不完全正确,尽管它提供了一个解决方案。

标记答案中的推理是正确的,是 Views 文件夹中的 web.config(具体为 BlockViewHandler 设置)阻止了直接访问文件。它用于保护 Asp.Net MVC 中的视图。但是,如果您询问有关直接提供这些文件的问题,那么您可能有充分的理由这样做,例如使用 AngularJS 部分视图(如我们的例子),我们不想复制具有奇怪名称的视图文件夹。

因此,您可以在 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" />
于 2014-07-16T19:27:12.717 回答
15

另一个替代选项是在任何所需的控制器中插入一个操作方法来提供 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;
 }
于 2016-10-13T07:58:17.150 回答
1

如果您打算使用内部视图文件夹,上述答案应该是最好的,但这个答案可能对迁移到 asp.net mvc 核心的用户有用。将文件放在 wwwroot 而不是 views 文件夹中应该可以让您的 html 页面像 localhost/myfile.html 一样轻松访问

于 2019-03-27T05:28:39.847 回答
0

您可以将它放在 /Content 文件夹中。

于 2022-01-31T19:38:34.283 回答