0

我有一个本地化 httphandler,它在我的 ASP.Net MVC2 Content 文件夹的上下文中运行(它正在做的一部分是编译 /Content/css 中的 .less 文件)。我对这组特定请求的默认路由如下所示:

context.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

context.MapRoute(
    "Area_default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new { controller = new VirtualDirectoryConstraint("VDirectory1") },
    new string[] { "Namespace.One.MVC" }
);

(顺便说一句 - 我认为它不相关,但以防万一 - 如果请求不是来自传入的应用程序路径/虚拟目录,则 VirtualDirectoryConstraint 拒绝此路由上的匹配项)

使用此配置,调用http://server.net/VDirectory1/Content/css/LessCompiler.axd失败,因为没有 ContentController 类。一切都很好。

当我添加

context.Routes.IgnoreRoute("{Content}/{*pathInfo}");

该调用成功,但随后调用

http://server.net/VDirectory1/Localization/ClientScript/en-US.js

http://server.net/VDirectory1/Authorization/ClientScript

失败。查看 Phil Haack 的 RouteDebugger 工具,这些调用与 Content IgnoreRoute 路由匹配:

True    {Content}/{*pathInfo}   (null)  (null)  (null)

因此不会分别路由到 LocalizationController 和 AuthorizationController。

显然,我误解了应该如何使用 IgnoreRoute 以及为什么那个特定的 IgnoreRoute 匹配这些请求。我错过了什么?

4

1 回答 1

2

您的 IgnoreRoute 不应该使用Content而不是{Content}吗?

context.Routes.IgnoreRoute("Content/{*pathInfo}");

目前,{Content}可能正在将其作为变量扩展为空,这使得 pathinfo 匹配所有内容。

于 2012-05-20T13:59:17.430 回答