2012-02-10 91 views
2

如果我在这个方法中写一个ActionFilter这样HttpContext.Current VS ActionExecutingContext

public override void OnActionExecuting(ActionExecutingContext filterContext) 

,我也可以通过HttpContext.Current可以访问当前上下文。我只是想知道这两种情况有什么区别?

回答

3

从过滤器上的article

当你实现OnActionExecuted方法,你最终会 接收类型ResultExecutedContext的一个实例。除了让 你访问currentControllerContext,你还将获得 属性

  • 得到的ActionResult(属性Result)负责生成响应返回给客户端;

  • 看看处理是否被取消(例如,当您在OnActionExecuting方法中设置ActionExecuting上下文的Result属性时)。您可以从Canceled属性中获取此信息;

  • 获得对在处理过程中可能产生的异常的引用(正如您可能预料的那样,这是通过Exception属性可用的 );

  • 指示您已处理异常(属性ExceptionHandled)。

...的ResultExecutingContext从 ActionExecutingContext我们已经谈到了一点不同。如果您构建其中一个 过滤器,然后,您可以通过在OnResultExecuting方法中将取消 属性设置为true来取消进一步处理。请注意, 发生这种情况时,您的视图将不会被调用,并且您最终不会生成通常发送回客户端的HTML(我假设一个简单的案例,您有一个可生成HTML的视图的 )。作为 我们会看到,您也可以有一个生成JSON的视图...)。

相关问题