简而言之,我有一个MVC web应用程序,它有一个代理类,可以在登录用户的上下文中将请求编组到另一个web应用程序。
这一切都工作得很好,除了一些传出链接(即入站链接到我的MVC应用程序)从其他web应用程序包含url "/views"。
这些请求应该根据这个路由进行映射:
routes.MapRoute(
name: "TableauViews",
url: "views",
defaults: new { controller = "Tableau", action = "Views" }
);
但这从来没有发生过。如果我将控制器动作的名称更改为其他内容,并在浏览器中输入相应的url,它就可以工作了。
这让我怀疑映射包含单词"views"作为其路径一部分的url存在一些问题。有人能证实吗?
问题是操作顺序。Views是一个物理文件夹和一个路由。ASP。. NET HttpHandler将读取web。并在路由处理程序获取URL之前阻止任何进入视图的内容。如果你看看网络。在视图文件夹(视图实际存储的地方)的配置文件中,您可能会看到这样的内容:
<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"或简单的"external"可能会有所帮助。另一种选择是从视图web中删除上面的行。配置,但这可能会导致一些不良行为。
本文讨论的是仅限制某些类型的文件的传递,而不是阻止所有可能对您有帮助的文件。
http://blog.falafel.com/Blogs/j-tower/2014/03/28/loading-javascript-files-from-the-views-folder-in-asp-net-mvc我找不到任何明确说明"views"是保留词的内容,但是文章http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx描述了如何放宽可以使用哪些词的规则。