Ответ 1
Выполнение перенаправления внутри конструктора контроллера не является хорошей практикой, потому что контекст не может быть инициализирован. Стандартная практика заключается в написании настраиваемого атрибута действия и переопределении метода 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"
}));
}
}
}
а затем украсить контроллер, который вы хотите перенаправить с этим атрибутом. Будьте предельно осторожны, чтобы не украсить контроллер, к которому вы перенаправляетесь с помощью этого атрибута, или вы столкнетесь с бесконечным циклом.
Итак, вы могли:
[RedirectingAction]
public class HomeController : Controller
{
public ActionResult Index()
{
// This action is never going to execute if the
// redirecting condition is met
return View();
}
}
public class SomeOtherController : Controller
{
public ActionResult SomeAction()
{
return View();
}
}