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

时间:2013-07-30 14:12:19

标签: asp.net-mvc asp.net-mvc-routing

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

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

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

我错过了什么?

5 个答案:

答案 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的身份轻松访问