2013-02-05 40 views
1

当一个视图已经在内存中呈现并且作为对客户端的响应发送之前,我想拦截该调用,检查正在呈现哪个视图,操作是什么和控制员,并做一些管家工作。从IResultFilter.OnResultExecuted获取路径数据

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

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

更新 我非常抱歉。我只是在反射器中查找了ResultExecutedContext,它向我展示了一个Exception,Cancelled和ActionResult属性。它没有显示任何RouteData。当我启动IDE时,它确实显示了路由数据。我想问这个问题,我觉得自己很讨厌。

回答

2

你可以从filterContextRouteData财产得到它:

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; 

等等...

+0

谢谢,达林。我明白了。我只需要一个轨道来运行。我感到惭愧的提出了这个问题和最近的一个关于截取东西(动作过滤器)的问题,你也回答了这个问题。我通常不是这个笨蛋。我不知道是什么,如果这是我所承受的压力,我最近不会去思考。 –

+0

没问题。没有什么可以感到羞耻的。这就是StackOverfow的重点 - 帮助同行开发人员和学习新事物。 –

+1

它可能会帮助其他人,特别是考虑到达林的反应深度,所以这不是件坏事 – levelnis

1

ResultExecutedContextRouteData属性,它应该给你什么,你需要

+0

非常感谢。 :-) –