我可以创建匹配已经忽略的路线的路线吗?

时间:2011-09-28 20:37:49

标签: asp.net-mvc routing ignoreroute

所以,我在我的global.asax创建我的MVC路由时有以下内容。它们按照它们出现在下面的顺序调用。我期望发生的是它会忽略到css文件夹的路由,但是然后创建到css / branding.css的路由(在运行时从另一个视图生成)

_routeCollection.IgnoreRoute("css/{*pathInfo}");

_routeCollection.MapRoute("BrandingCSS", "css/branding.css", new { controller = "Branding", action = "Css" });

这不可能吗?当我向css / branding.css发出请求时,我收到404错误,指出该文件不存在。有没有办法使这项工作,我宁愿它对任何人来说是透明的,这个文件来自除css文件夹以外的任何地方。

1 个答案:

答案 0 :(得分:1)

您可以通过在IgnoreRoute中设置RouteConstraint来创建和提供自定义css文件。创建以下约束:

public class NotBrandingCss : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        return values[parameterName].ToString().ToLowerInvariant() != "branding.css";
    }
}

然后,将IgnoreRoute更改为以下内容:

_routeCollection.IgnoreRoute("css/{*pathInfo}", new { pathInfo = new NotBrandingCss() });

现在,/css/branding.css的请求将失败您的IgnoreRoute,并将转到您的BrandingCSS路线等。