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.