Asp.net mvc 从IResultFilter.OnResultExecuted内获取路由数据
当一个视图在内存中呈现并且作为响应发送给客户端之前,我想截取调用,检查呈现的是哪个视图,操作和控制器是什么,并进行一些内部管理 因此,我正在实现一个ResultFilter并重写OnResultExecuted方法 在这个方法中,如何获取路由数据以确定调用了哪个视图、操作和控制器 更新 我深表歉意。我只是在reflector中查找ResultExecutedContext,它只显示了一个Exception、Cancelled和ActionResult属性。它没有给我显示任何路由数据。当我启动IDE时,它确实向我显示了路由数据。问这个问题让我觉得自己像个傻瓜。你可以从filterContext的属性中得到它:Asp.net mvc 从IResultFilter.OnResultExecuted内获取路由数据,asp.net-mvc,Asp.net Mvc,当一个视图在内存中呈现并且作为响应发送给客户端之前,我想截取调用,检查呈现的是哪个视图,操作和控制器是什么,并进行一些内部管理 因此,我正在实现一个ResultFilter并重写OnResultExecuted方法 在这个方法中,如何获取路由数据以确定调用了哪个视图、操作和控制器 更新 我深表歉意。我只是在reflector中查找ResultExecutedContext,它只显示了一个Exception、Cancelled和ActionResult属性。它没有给我显示任何路由数据。当我启动ID
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");
}
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;
}
就呈现的视图而言,您可以从属性检索此信息:
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");
}
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;
依此类推……您可以从filterContext的属性中获得它:
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");
}
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;
}
就呈现的视图而言,您可以从属性检索此信息:
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");
}
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;
等等…ResultExecutedContext有一个RoutedData属性,它应该能满足您的需要ResultExecutedContext有一个RoutedData属性,它应该能满足您的需要谢谢,达林。我明白了。我只是需要一条跑道来跑。我很惭愧地问了这个问题和最近一个关于拦截stuff action filters的问题,你也回答了这个问题。我通常不会这么笨。我不知道是什么原因,如果是因为我承受的压力,我最近没有认真思考问题。没问题。没有什么可羞耻的。这就是StackOverfow所要做的——帮助同级开发人员和学习新事物。它很可能会帮助其他人,特别是考虑到Darin的反应的深度,所以这不是坏事,Tanks,Darin。我明白了。我只是需要一条跑道来跑。我很惭愧地问了这个问题和最近一个关于拦截stuff action filters的问题,你也回答了这个问题。我通常不会这么笨。我不知道是什么原因,如果是因为我承受的压力,我最近没有认真思考问题。没问题。没有什么可羞耻的。这就是StackOverfow所要做的——帮助同行开发人员和学习新事物。它很可能会帮助其他人,特别是考虑到Darin的反应的深度,所以这不是坏事