Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 从IResultFilter.OnResultExecuted内获取路由数据_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 从IResultFilter.OnResultExecuted内获取路由数据

Asp.net mvc 从IResultFilter.OnResultExecuted内获取路由数据,asp.net-mvc,Asp.net Mvc,当一个视图在内存中呈现并且作为响应发送给客户端之前,我想截取调用,检查呈现的是哪个视图,操作和控制器是什么,并进行一些内部管理 因此,我正在实现一个ResultFilter并重写OnResultExecuted方法 在这个方法中,如何获取路由数据以确定调用了哪个视图、操作和控制器 更新 我深表歉意。我只是在reflector中查找ResultExecutedContext,它只显示了一个Exception、Cancelled和ActionResult属性。它没有给我显示任何路由数据。当我启动ID

当一个视图在内存中呈现并且作为响应发送给客户端之前,我想截取调用,检查呈现的是哪个视图,操作和控制器是什么,并进行一些内部管理

因此,我正在实现一个ResultFilter并重写OnResultExecuted方法

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

更新 我深表歉意。我只是在reflector中查找ResultExecutedContext,它只显示了一个Exception、Cancelled和ActionResult属性。它没有给我显示任何路由数据。当我启动IDE时,它确实向我显示了路由数据。问这个问题让我觉得自己像个傻瓜。

你可以从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;
依此类推……

您可以从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的反应的深度,所以这不是坏事