所以,我在我的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文件夹以外的任何地方。
答案 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路线等。