何时使用HttpResponseMessage和Request.CreateResponse

use*_*508 35 c# asp.net-web-api

我们什么时候应该使用该HttpResponseMessage对象Request.CreateResponse(...)?何时应该使用该方法?

另外,HttpResponseMessage对象和Request.CreateResponse(...)方法有什么区别?

Bad*_*dri 44

HttpResponseMessage对象和Request.CreateResponse(...)方法有什么区别?

它可能是显而易见的,但它是Request.CreateResponse创建HttpResponseMessage对象的辅助方法.

当我们必须使用HttpResponseMessage对象时,我们必须使用Request.CreateResponse(...)方法?

如果要使用内置内容协商功能,请使用Request.CreateResponse.返回对象时,ASP.NET Web API必须将对象序列化为响应主体.这通常可以是JSON或XML(其他媒体类型是可能的,但您需要创建格式化程序).选择的媒体类型(JSON或XML)基于请求内容类型,请求中的Accept标头等,内容协商是确定要使用的媒体类型的过程.通过使用Request.CreateResponse,您将自动使用此过程的结果.

在另一方面,如果你创建HttpResponseMessage你自己,你必须指定一个基于媒体格式上的物体将被序列化,并通过指定媒体格式器你自己,你可以重写conneg的结果.

编辑以下是如何指定JSON格式化程序的示例.

public HttpResponseMessage Get(int id)
{
    var foo = new Foo() { Id = id };
    return new HttpResponseMessage()
    {
        Content = new ObjectContent<Foo>(foo,
                  Configuration.Formatters.JsonFormatter)
    };
}
Run Code Online (Sandbox Code Playgroud)

有了这个,即使您发送请求Accept:application/xml,您也只能获得JSON.