Request.CreateResponse 与 response.Content?

Request.CreateResponse versus response.Content?

我的代码是

var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(
                             JsonConvert.SerializeObject(data),
                             Encoding.UTF8, "application/json");
return response;

它通过返回一些 json 数据工作正常。

后来我注意到 Request.CreateResponse() 可以接受第二个参数 T value,其中 valuethe content of the HTTP response message。所以我试着把上面三行压缩成一行

return Request.CreateResponse(
             HttpStatusCode.OK, new StringContent(JsonConvert.SerializeObject(data), 
             Encoding.UTF8, "application/json"));

但它没有按预期工作。它returns

{
  "Headers": [
    {
      "Key": "Content-Type",
      "Value": [
        "application/json; charset=utf-8"
      ]
    }
  ]
}

我是不是理解错了Request.CreateResponse()的第二个参数?

Did I misunderstand the second parameter of Request.CreateResponse()

是的,你有。第二个参数只是值本身。您将 StringContent 作为 T value 传递,而不是让 CreateResponse 使用您传递的正确内容类型为您序列化它。您看不到数据的原因是 CreateResponse 可能不了解如何正确序列化 StringContent.

类型的对象

您只需要:

return Request.CreateResponse(HttpStatusCode.OK, data, "application/json"));