1

当视图已经在内存中渲染并且在它作为响应发送给客户端之前,我想拦截调用,检查正在渲染的视图,动作和控制器是什么,并做一些内务处理。

因此,我正在实现一个ResultFilter并覆盖该OnResultExecuted方法。

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

更新 我深表歉意。我只是在反射器中查找了 ResultExecutedContext,它只显示了一个 Exception、Canceled 和 ActionResult 属性。它没有向我显示任何 RouteData。当我启动 IDE 时,它确实显示了路线数据。问这个问题我感觉像个混蛋。

4

2 回答 2

3

您可以从filterContext'sRouteData属性中获取它:

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");
}

至于呈现哪个视图,您可以从Result属性中检索此信息:

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;

等等...

于 2013-02-05T09:33:46.647 回答
1

ResultExecutedContext有一个RouteData属性应该给你你需要的东西

于 2013-02-05T09:34:11.320 回答