【问题标题】:ASP MVC, how to get controller which called RedirectToActionASP MVC,如何获取调用 RedirectToAction 的控制器
【发布时间】:2015-09-13 10:40:44
【问题描述】:

我有 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 调用?有什么办法吗? (我不想使用 cookie 或在参数中发送它,因为我在整个控制器中有很多 RedirectToAction 并且我想将它全局应用于控制器)

【问题讨论】:

    标签: c# asp.net asp.net-mvc redirecttoaction


    【解决方案1】:

    RedirectToAction 实际上是控制器本身的一部分,而不是 actionresult,因此您可以覆盖它并从那里填充您需要的临时数据:

    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。

    【讨论】:

    • UrlReferrer 在 OnActionExecuting 方法中为空... TempData 不是我想要的,因为我需要在每个方法中都使用重定向进行此操作
    • Request.ServerVariables 不包含 http_referrer
    • 您可以通过过滤器或自定义 actionresult 使用 tempdata 想法,只需设置 tempdata 值,然后像往常一样重定向,但您仍然必须在所有控制器中替换它。
    • @Maarty 检查编辑。原来重定向是通过控制器方法而不是 actionresult 完成的,所以类似的东西应该可以工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多