ASP.NET MVC - добавить / переписать данные маршрута глобально - PullRequest
0 голосов
/ 03 января 2011

У меня довольно большое приложение ASP.NET MVC 2 (несколько областей, каждая с собственной регистрацией маршрутизации), использующее такие маршруты:

/ Item / 12345 / Detail - где 12345 - идентификатор элемента. Все приложение просто полагаться на эти числовые идентификаторы. Но теперь есть требование (SEO вещи), чтобы URL выглядели так:

* / Уникальная строка-название элемента 1004 * / товара / Detail

Я хотел бы обработать это глобально на некотором высоком уровне - например, загрузить числовой идентификатор перед оценкой маршрута и «заменить» его в данных маршрута. Но я не уверен, что является правильным местом для такого взлома - пользовательский MvcHandler, пользовательский IRouteHandler, где-нибудь еще? есть идеи по этому поводу? :)

1 Ответ

3 голосов
/ 31 января 2011

Эй, я понял это сам в конце концов, все, что мне нужно было сделать, это переопределить метод execute моего BaseController следующим образом:

protected override void Execute(System.Web.Routing.RequestContext requestContext)
    {
        if (requestContext.RouteData.Values["seo"] != null && requestContext.RouteData.Values["id"] == null)
        {
            // retrieve Id from Seo here (i use cache for that)

            if (Id != null)
            {
                requestContext.RouteData.Values.Add("Id", (long)Id);
            }
            else
            {
                requestContext.RouteData.Values.Add("Id", 0);
            }
        }

        base.Execute(requestContext);
    }

Так что, в конце концов, не нужен взлом маршрутизации:)

...