在哪里使用Controller.HttpContext

Ben*_*ter 0 asp.net-mvc httpcontext

在我的基本控制器的构造函数中,我调用一个扩展方法来检查客户端上的特定cookie.

目前我正在使用System.Web.HttpContext.Current来获取当前上下文.

但是,我认为我应该使用Controller.HttpContext,因为它更可测试并包含有关请求的其他信息.

但是,Controller.HttpContext在创建时返回null(相信这是设计),而且还在Initialize和Execute方法上返回null(除非我使用Routing.RequestContext.HttpContext?).

所以,如果我应该使用Controller.HttpContext而不是HttpContext.Current,请求在什么时候可以使用它?

谢谢Ben

Chi*_*ino 5

在控制器中调用操作方法时,可以获取Controller.HttpContext.这意味着您可以在操作方法中访问它

如果你想在每个请求上检查一下你可以使用自定义属性看看这个例子:

public class LoggingFilterAttribute : ActionFilterAttribute
{
  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
    filterContext.HttpContext.Trace.Write("(Logging Filter)Action Executing: " +
        filterContext.ActionDescriptor.ActionName);

    base.OnActionExecuting(filterContext);
  }

  public override void OnActionExecuted(ActionExecutedContext filterContext)
  {
    if (filterContext.Exception != null)
        filterContext.HttpContext.Trace.Write("(Logging Filter)Exception thrown");

    base.OnActionExecuted(filterContext);
  }
}
Run Code Online (Sandbox Code Playgroud)

我建议你阅读自定义属性.但是你说更可测试的是什么意思?您可以使用像rhino mocks或google moq这样的模拟框架轻松模拟您的httpcontext