ale*_*nov 89 asp.net-mvc asp.net-mvc-routing
我希望能够请求.html位于该~/Views文件夹中的静态文件.根据文档,路由系统在评估应用程序的路由之前检查URL是否与磁盘文件匹配.
但是当我请求文件时出现404错误.
我的文件位于〜/ Views文件夹中.URL是:http://[localhost]/Views/HtmlPage1.html
我错过了什么?
Dar*_*rov 106
我希望能够请求位于'〜/ Views'文件夹中的静态.html文件.
你不能.此文件夹中有一个web.config文件,它明确禁止从中访问任何文件.如果您希望能够从客户端访问文件,则不应将这些文件放在ViewsASP.NET MVC中具有特殊含义的文件夹中.
您可以在一个~/Static文件夹中放置HTML文件.然后像这样访问它:
http://example.com/yourapplicationname/static/foo.html
Run Code Online (Sandbox Code Playgroud)
小智 74
要在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>
Run Code Online (Sandbox Code Playgroud)
Vik*_*kas 31
我希望能够请求位于〜/ Views文件夹中的静态.html文件.
嗯,你可以.明确的答案并不完全正确,尽管它给出了解决方案.
标记答案中的推理是正确的,它是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" />
Run Code Online (Sandbox Code Playgroud)
- 至 -
<add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
Run Code Online (Sandbox Code Playgroud)
Ven*_*ndi 14
另一个备选方案是在任何所需的控制器中插入一个动作方法来提供html文件
public ActionResult MyHtml()
{
var result = new FilePathResult("~/Views/HtmlPage1.html", "text/html");
return result;
}
Run Code Online (Sandbox Code Playgroud)
访问html为http:// yoursite/controller/MyHtml.您可以扩展此操作方法以接受html文件名作为方法/ querystrign参数并在运行时呈现文件,例如,像这样.
public ActionResult MyHtml(string htmlPageName)
{
var result = new FilePathResult($"~/Views/{htmlPageName}.html", "text/html");
return result;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79776 次 |
| 最近记录: |