我正在创建自己的ModelBinder。

我从属性HttpContext获得的ControllerContext.HttpContext获得表单值。

但是还有另一种获取此上下文的方法-ControllerContext.RequestContext.HttpContext

这些方法有什么主要区别吗?他们中的任何一个在某些情况下会失败吗?

最佳答案

这是RequestContext的源代码:

public RequestContext RequestContext
{
  get
  {
    if (this._requestContext == null)
      this._requestContext = new RequestContext(this.HttpContext ?? (HttpContextBase) new ControllerContext.EmptyHttpContext(), this.RouteData ?? new RouteData());
    return this._requestContext;
  }
  set
  {
    this._requestContext = value;
  }
}


因此,除非您进行特定的操作以在控制器上设置RequestContext(例如在单元测试中可能发生的情况),否则RequestContext.HttpContext将与HttpContext属性本身相同。

您不太可能遇到这两个值可能不同的情况。

10-04 22:30