【问题标题】:MVC controller differences between this.Response and this.HttpContext.Responsethis.Response 和 this.HttpContext.Response 之间的 MVC 控制器区别
【发布时间】:2014-03-02 14:51:29
【问题描述】:
MVC 控制器也有很多对象存在于 HttpContext 子对象中。这些对象之间有什么区别?
var res = HttpContext.Response;
var res1 = Response;
var req = HttpContext.Request;
var req1 = Request;
【问题讨论】:
标签:
c#
asp.net-mvc
dotnet-httpclient
【解决方案1】:
Controller 类的Request 和Response 属性实际上只是返回HttpContext.Request 和HttpContext.Response。两者没有区别。 Controller 属性的存在实际上是为了简洁,以避免使用 HttpContext.Request / HttpContext.Result。
你可以在source code看到它:
public abstract class Controller
{
// ...
public HttpRequestBase Request
{
get { return HttpContext == null ? null : HttpContext.Request; }
}
public HttpResponseBase Response
{
get { return HttpContext == null ? null : HttpContext.Response; }
}
// ...
}
但是,您应该使用 Controller 属性,因为它们与 MVC 直接相关,而不是 System.Web.dll 堆栈。如果将来 MVC 框架在 Request / Response 对象模型方面发生了变化,从而删除了与 System.Web 和 HttpContext 类的依赖关系,则 Request 和 @987654334 @ 的 Controller 本身应该直接反映实际情况,并且需要较少更改您的代码(尽管我认为我们不太可能在不久的将来看到这种重大变化)。