1

简而言之,我有一个 MVC Web 应用程序,它有一个代理类,可以在登录用户的上下文中将请求编组到另一个 Web 应用程序。

除了来自其他 Web 应用程序的一些传出链接(即到我的 MVC 应用程序的入站链接)包含 url“/views”之外,这一切都很好。

这些请求应根据此路由进行映射:

        routes.MapRoute(
            name: "TableauViews",
            url: "views",
            defaults: new { controller = "Tableau", action = "Views" }
        );

但它永远不会发生。如果我将控制器操作的名称更改为其他名称并在浏览器中输入相应的 url,它就可以工作。

这让我怀疑在映射包含单词“views”作为其路径的一部分的 url 时存在一些问题。谁能证实这一点?

4

2 回答 2

1

问题是操作的顺序。Views 是一个物理文件夹和一个路由。ASP.NET HttpHandler 将读取 web.config 并在路由处理程序获取 URL 之前阻止任何要查看的内容。如果您查看您的视图文件夹中的 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”或简单地“external”可能会有所帮助。另一种选择是从您的视图 web.config 中删除上面的行,但这可能会导致一些不良行为。

本文讨论的是仅限制某些类型的文件被传递,而不是阻止所有可能对您有帮助的文件。

http://blog.falafel.com/Blogs/j-tower/2014/03/28/loading-javascript-files-from-the-views-folder-in-asp-net-mvc

于 2014-06-09T15:10:32.960 回答
1

我找不到任何具体说明“视图”是保留字的内容,但文章http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx描述了如何放松关于可以使用哪些词的规则。

于 2013-05-17T15:37:37.830 回答