ASP.Net MVC4路由不工作-保留字



简而言之,我有一个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描述了如何放宽可以使用哪些词的规则。

最新更新