MVC控制器也有很多对象存在于HttpContext子对象中。这些对象有什么区别?
var res = HttpContext.Response;
var res1 = Response;
var req = HttpContext.Request;
var req1 = Request;
答案 0 :(得分:3)
Request
类的Response
和Controller
属性实际上只是返回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框架发生了变化,以至于删除了与System.Web和HttpContext
类的依赖关系,{{1} Request
本身的Response
和Controller
本身应该直接反映出是什么,并且需要更少的代码更改(尽管我认为在不久的将来我们不太可能看到这种突破性变化)。