简而言之,我有一个MVC网络应用程序,它有一个代理类,可以在登录用户的上下文中将请求发送到另一个Web应用程序。
除了从其他网络应用程序的一些外向链接(即到我的MVC应用程序的入站链接)包含网址“/ views”之外,这一切都正常。
应根据此路线映射这些请求:
routes.MapRoute(
name: "TableauViews",
url: "views",
defaults: new { controller = "Tableau", action = "Views" }
);
但它永远不会发生。如果我将控制器操作的名称更改为其他内容并在浏览器中输入相应的URL,则可以正常工作。
这使我怀疑将包含单词“views”的URL映射为其路径的一部分存在一些问题。谁能证实这一点?
答案 0 :(得分:1)
我找不到任何具体说“观点”是保留字的内容,但文章http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx描述了如何放宽可以使用的单词的规则。
答案 1 :(得分:1)
问题在于操作顺序。视图是物理文件夹和路径。在路由处理程序获取URL之前,ASP.NET HttpHandler将读取web.config并阻止任何进入视图的内容。如果您查看视图文件夹(实际存储视图的位置)中的web.config文件,您可能会看到如下内容:
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
此外,在配置的后面也可能有:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
这是你的罪魁祸首。我建议将你的路线命名为更像“externalViews”或简单地说“外部”可能会有所帮助。另一种方法是从视图web.config中删除上面的行,但这可能会导致一些不良行为。
本文讨论的是仅限制某些类型的文件被传递而不是阻止所有可能对您有帮助的文件。