ASP MVC, как получить контроллер, который называется RedirectToAction

У меня есть 2 контроллера.

public class HomeController : Controller
    {
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                // do some stuff if controller before was ServiceController
                    base.OnActionExecuting(filterContext);           

            }

    public ActionResult Index()
            {            
                    return View();
            }
}

а также ServiceController с

public ActionResult Confirm()
            { return RedirectToAction("Index", "Home");}

Как я могу узнать в HomeController, вызвано ли действие RedirectToAction из контроллера службы? Там в любом случае? (Я не хочу использовать куки или отправлять их в параметрах, потому что у меня много RedirectToAction во всем контроллере, и я хочу применить его глобально для контроллера)

1 ответ

RedirectToAction на самом деле является частью самого контроллера, а не результатом действия, поэтому вы можете переопределить его и заполнить нужные вам там данные:

protected override RedirectToRouteResult RedirectToAction(string actionName, string controllerName, System.Web.Routing.RouteValueDictionary routeValues)
{
    TempData["RedirectedFromAction"] = this.ControllerContext.RouteData.Values["action"].ToString();
    TempData["RedirectedFromController"] = this.ControllerContext.RouteData.Values["controller"].ToString();
    return base.RedirectToAction(actionName, controllerName, routeValues);
}

Затем вы можете проверить, что filterContext.Controller.TempData["RedirectedFromController"] является ServiceController или чем-то еще. Если вам это нужно в нескольких местах, вы можете создать BaseController.

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