Asp.net mvc ASP.NET MVC 3 Beta 1阻止对Razor视图的访问
在MVC3Beta1中有没有办法阻止对Razor视图的访问(404)?当我创建一个全新的空白站点(IIS7),然后从浏览器访问/views/home/index.cshtml,而不是404时,我得到了这个结果Asp.net mvc ASP.NET MVC 3 Beta 1阻止对Razor视图的访问,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,在MVC3Beta1中有没有办法阻止对Razor视图的访问(404)?当我创建一个全新的空白站点(IIS7),然后从浏览器访问/views/home/index.cshtml,而不是404时,我得到了这个结果 [InvalidCastException: Unable to cast object of type 'ASP.Index_cshtml' to type 'System.Web.IHttpHandler'.] System.Web.WebPages.WebPageHtt
[InvalidCastException: Unable to cast object of type 'ASP.Index_cshtml' to type 'System.Web.IHttpHandler'.]
System.Web.WebPages.WebPageHttpHandler.CreateFromVirtualPath(String virtualPath, VirtualPathFactoryManager virtualPathFactoryManager) +56
System.Web.WebPages.WebPageRoute.DoPostResolveRequestCache(HttpContextBase context) +253
System.Web.WebPages.WebPageHttpModule.OnApplicationPostResolveRequestCache(Object sender, EventArgs e) +89
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
默认情况下,views文件夹中的web.config文件设置为阻止所有文件请求,但显然该请求仍在通过
复制步骤:文件->新项目
ASP.NET MVC 3 Web应用程序
互联网应用程序(Razor)
F5
导航到/views/home/index.cshtml您可能可以使用web.config中的某种重写规则将用户从直接链接的.cshtml重定向到实际操作,或者只是将其重定向/重写到404页面
<system.webServer>
<rewrite>
<rules>
<rule name="rule1" patternSyntax="Wildcard" stopProcessing="true">
<match url="*.cshtml" />
<action type="Redirect" url="http://www.example.com/some404.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
当然,这在没有查询字符串(key=value部分)的情况下有效。唯一的缺点是web.config不知道您注册的路由(通常在Global.asax.cs中)。而且,据我所知,现在有办法了。为此,您必须编写一些自定义代码。请看Phil Haack的文章及其附带的源代码
(请不要因为它不符合您的需要而否决投票,即使我正在回答其他人的问题。)我是ASP.NET团队的开发负责人,负责ASP.NET MVC 3和ASP.NET网页和Razor 这在ASP.NET MVC 3 RC中不是完全固定的,但在ASP.NET MVC 3 RTM中会完全固定 在ASP.NET MVC 3 RC或更早版本中,没有什么“非常糟糕”的事情发生:最糟糕的情况是有人可以检测到你的应用程序中是否存在视图,但他们无法让它运行(由于那个奇怪的异常)。这是一个轻微的安全问题,因为这是一种信息披露形式,但不是一个非常严重的问题
在ASP.NET MVC 3 RTM中~/views/…中的所有Razor视图。。。以及MVC区域内的任何Razor视图都是100%阻止的,浏览器无法直接运行。它们只能作为MVC视图页运行。对于那些从MVC3 RC迁移到RTM的页面,请确保查看\views\web.config,并添加以下配置
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
这将确保所有视图文件(*.cshtml)返回404未找到。您能提供完整堆栈跟踪吗?更新了完整堆栈跟踪和复制步骤。谢谢,我可以确认这是一个有效的错误。如果您忽略global.asax中的路由,会发生什么?IgnoreRoute(“{resource}.cshtml/{*pathInfo}”);我已经试过了,但没有任何改变。这并不能解决问题——我不想忽略这些或显示404错误页面,而是显示它们……thekiado的问题是关于404的。所以你的反对票是不公平的。我将添加一个更复杂的版本,实际处理试图从中获取控制器和视图的操作。
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>