当一个视图在内存中呈现并且在作为对客户端的响应发送之前,我想拦截该调用,检查正在呈现哪个视图,操作和控制器是什么,并做一些房子 - 保管。
因此,我正在实施ResultFilter
并覆盖OnResultExecuted
方法。
在此方法中,如何获取路径数据以确定调用哪个视图,操作,控制器?
更新 我的道歉很多。我只是在反射器中查找ResultExecutedContext,它只显示了Exception,Canceled和ActionResult属性。它没有向我显示任何RouteData。当我启动IDE时,它确实显示了路由数据。我觉得这个问题就像个家伙。
答案 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)
ResultExecutedContext
有RouteData
属性,可以为您提供所需内容