Как создать URL в global.asax, используя мой маршрут. int asp.net mvc - PullRequest
0 голосов
/ 26 ноября 2010

У меня есть функция в событии BeginRequest в global.asax, которое анализирует URL-адрес запроса, проверяет некоторые его части и перенаправляет пользователя на другой URL-адрес.

Проблема: как создать URL-адрес из routeName.Я хочу сделать это, потому что, если маршрут будет изменен, функциональность перенаправления будет работать.Мне не нравится код:

String.Format("{0}/{1}/{2}", host, part1, part2);

В связи с этим я могу использовать Url.RouteUrl, но в global.asax мне нужно вручную создать объект UrlHelper с параметрами RequestContext и RouteData.Где я могу получить объект Routedata?

1 Ответ

0 голосов
/ 26 ноября 2010

У меня есть функция в событии BeginRequest в global.asax, которое анализирует URL-адрес запроса, проверяет некоторые его части и перенаправляет пользователя на другой URL-адрес.

Более MVCish способ достижения этого заключается в использовании фильтра пользовательских действий и выполнении этой обработки в методе OnActionExecuting , который будет вызываться до Действие контроллера вызывается:

public class CustomFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // read some value from the request
        string value = filterContext.RequestContext.RouteData.Values["someValue"] as string;
        if (!IsValueValid(value))
        {
            // if the value is invalid redirect to some controller action
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary(new
                {
                    action = "foo",
                    controller = "bar"
                })
            );
        }
        else
        {
            base.OnActionExecuting(filterContext);
        }
    }
}

А теперь осталось только украсить базовый контроллер этим атрибутом, чтобы он применялся ко всем действиям.

...