我可以创建一条路由来匹配已经被忽略的路由吗?



那么,我在我的全局中有以下内容。创建我的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文件夹。

您可以通过在ignoeroute中设置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";
    }
}

然后,将你的ignoeroute更改为:

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

现在,对/css/branding.css的请求将使你的ignoeroute失败,并将转到你的BrandingCSS路由,等等

最新更新