c# - 何时使用 HttpResponseMessage 和 Request.CreateResponse

标签 c# asp.net-web-api

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

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

最佳答案

What is difference between HttpResponseMessage object and Request.CreateResponse(...) method?

很明显,Request.CreateResponse 是创建 HttpResponseMessage 对象的辅助方法。

When we must use HttpResponseMessage object and When we must use Request.CreateResponse(...) method?

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

另一方面,如果您自己创建 HttpResponseMessage,则必须指定一个媒体格式化程序,对象将基于该媒体格式化程序进行序列化,并且通过自己指定媒体格式化程序,您可以覆盖连接。

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

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

有了这个,即使您使用 Accept:application/xml 发送请求,您也只会得到 JSON。

关于c# - 何时使用 HttpResponseMessage 和 Request.CreateResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22060357/

相关文章:

C# 如何检测互联网连接/断开(带有事件)?

c# - Cookie 不会保存在 ASP.NET WebMethod 中

cookies - 将凭据/ token 保存在 cookie 中?

c# - Angular2+ C# Web Api - 服务器端保存错误时间的日期时间

c# - 类型转换的性能

c# - 2 列布局循环通过 MVC 模型 c#

c# - GC 语言的优化,有什么想法吗?

c#数据源不能为空

c# - ApiController 类如何工作和表现?

c# - Web API Controller 返回任务并不总是等待任务完成(puppeteer-sharp)