MVC控制器之间的差异.Response和this.HttpContext.Response

时间:2014-03-02 14:51:29

标签: c# asp.net-mvc dotnet-httpclient

MVC控制器也有很多对象存在于HttpContext子对象中。这些对象有什么区别?

        var res = HttpContext.Response;
        var res1 = Response;

        var req = HttpContext.Request;
        var req1 = Request;

1 个答案:

答案 0 :(得分:3)

Request类的ResponseController属性实际上只是返回HttpContext.RequestHttpContext.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本身的ResponseController本身应该直接反映出是什么,并且需要更少的代码更改(尽管我认为在不久的将来我们不太可能看到这种突破性变化)。