Могу ли я создать маршрут, который соответствует уже игнорируемому маршруту?
Итак, в моем 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 ответ
Вы можете создавать и обслуживать пользовательский файл CSS, установив RouteConstraint
в вашем IgnoreRoute. Создайте следующее ограничение:
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 и т. д.