Могу ли я создать маршрут, который соответствует уже игнорируемому маршруту?

Итак, в моем 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 и т. д.

Другие вопросы по тегам