如何从ActionExecutingContext获取ActionResult?

时间:2013-04-23 09:43:53

标签: .net redirect asp.net-mvc-4 action-filter actionresult

我希望在被覆盖的OnActionExecuting()中获得导致ActionFilterAttribute的操作。我们的想法是将其保存在会话中,以便在输入临时“更改密码”页面后将用户重定向到其预期页面。

我目前的尝试是:

public override void OnActionExecuting(ActionExecutingContext actionExecutingContext)
{
    // ...
    ActionResult originatingActionResult = new RedirectToRouteResult(
        new RouteValueDictionary
        {
            { "controller", actionExecutingContext.ActionDescriptor.ControllerDescriptor.ControllerName },
            { "action", actionExecutingContext.ActionDescriptor.ActionName }
        });
    // ...

但这对于正在做的事情来说似乎相当复杂 - 有更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

原来它可以简化为:

ActionResult originatingActionResult = new RedirectToRouteResult(
        new RouteValueDictionary(filterContext.RouteData.Values));

...然而

该项目使用T4MVC并且RedirectToAction无法使用,因为它在控制器上被覆盖,并且GetT4MVCResult()上应该有ActionResult

所以我最终这样做了:

RouteValueDictionary originatingRouteValues = new RouteValueDictionary(
    actionExecutingContext.RouteData.Values);

// ... followed by ...

return this.RedirectToRoute(routeValues);