Answers:
我希望能够请求位于“〜/ Views”文件夹中的静态.html文件。
你不能 此文件夹中有一个web.config文件,该文件明确禁止访问该文件中的任何文件。如果您希望能够从客户端访问文件,则不应将这些文件放在Views
ASP.NET MVC中具有特殊含义的文件夹中。
您可能有一个~/Static
文件夹,您可以在其中放置HTML文件。然后像这样访问它:
http://example.com/yourapplicationname/static/foo.html
要在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>
我希望能够请求位于〜/ Views文件夹中的静态.html文件。
好吧,你可以。标记的答案虽然可以提供解决方案,但并不完全正确。
标记答案中的理由是正确的,因为它是Views文件夹中的web.config(特定于BlockViewHandler设置),它阻止直接访问文件。它在那里可以保护Asp.Net MVC中的视图。但是,如果您问到有关直接提供这些文件的问题,那么您可能有充分的理由这样做,例如使用AngularJS部分视图(如本例所示),在该视图中我们不想使用奇怪的名称复制views文件夹。
因此,这是一个非常简单的调整,您可以在Views文件夹中的web.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" />
另一个替代方法是在任何所需的控制器中插入一个操作方法以提供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;
}