MVC - Перенаправление внутри Конструктора - PullRequest
20 голосов
/ 25 января 2011

Я хотел бы знать, как я могу перенаправить запрос внутри конструктора контроллера, если мне нужно это сделать?

Например: внутри конструктора мне нужно инициализировать объект с динамическим значениемВ некоторых случаях я не хочу это делать, и в этом случае я хочу перенаправить в другое место.В то же время остальная часть конструктора не будет выполнена, ни «оригинальное следующее действие».

Как я могу это сделать?Спасибо

РЕДАКТИРОВАТЬ # 1

Первоначально я использовал:

  public override void OnActionExecuting(ActionExecutingContext filterContext) 

Там я мог перенаправить на другой контроллер / действие / URL, нопозже мне нужно было изменить свой контроллер, где я инициализирую переменную в его конструкторе и у меня есть код, который действительно должен перенаправить запрос: P

Мне это нужно также потому, что OnActionExecuting выполняется ПОСЛЕ конструктора контроллера,И, по моей логике, перенаправление должно быть сделано там.

1 Ответ

49 голосов
/ 25 января 2011

Выполнение перенаправлений внутри конструктора контроллера не является хорошей практикой, поскольку контекст может не инициализироваться.Стандартная практика заключается в написании атрибута настраиваемого действия, переопределении метода OnActionExecuting и выполнении перенаправления внутри.Пример:

public class RedirectingActionAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        if (someConditionIsMet)
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
            {
                controller = "someOther",
                action = "someAction"
            }));
        }
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...