从IResultFilter.OnResultExecuted中获取路线数据

时间:2013-02-05 09:32:01

标签: asp.net-mvc

当一个视图在内存中呈现并且在作为对客户端的响应发送之前,我想拦截该调用,检查正在呈现哪个视图,操作和控制器是什么,并做一些房子 - 保管。

因此,我正在实施ResultFilter并覆盖OnResultExecuted方法。

在此方法中,如何获取路径数据以确定调用哪个视图,操作,控制器?

更新 我的道歉很多。我只是在反射器中查找ResultExecutedContext,它只显示了Exception,Canceled和ActionResult属性。它没有向我显示任何RouteData。当我启动IDE时,它确实显示了路由数据。我觉得这个问题就像个家伙。

2 个答案:

答案 0 :(得分:3)

您可以从filterContext的{​​{3}}媒体资源中获取:

public override void OnResultExecuted(ResultExecutedContext filterContext)
{
    RouteData rd = filterContext.RouteData;
    // read from the current request RouteData the information
    // you were looking for. For example to get the current controller
    // and action:
    string currentController = rd.GetRequiredString("controller");
    string currentAction = rd.GetRequiredString("action");
}

就呈现的视图而言,您可以从RouteData属性中检索此信息:

var viewResult = filterContext.Result as ViewResultBase;
if (viewResult != null)
{
    // the controller action returned a view result (either a ViewResult or PartialViewResult)
    // so we could retrieve the view name here:
    string viewName = viewResult.ViewName;
}

另一方面,如果控制器操作返回了JsonResult,您还可以提取检索它:

var jsonResult = filterContext.Result as JsonResult;

依旧......

答案 1 :(得分:1)

ResultExecutedContextRouteData属性,可以为您提供所需内容