32

在我的一个 Get 请求中,我想返回一个包含一些内容的 HttpResponseMessage。目前我的工作方式如下:

var header = new MediaTypeHeaderValue("text/xml");
Request.CreateResponse(HttpStatusCode.OK, myObject, header);

但是,由于我使用的是静态请求,这变得很难测试。根据我的阅读,我应该能够做到以下几点:

return new HttpResponseMessage<T>(objectInstance);

但是,似乎无法做到这一点。是因为我使用的是旧版本的 WebApi / .NET?


在旁注中,我发现您可能会创建如下响应:

var response = new HttpResponseMessage();
response.Content = new ObjectContent(typeof(T), objectInstance, mediaTypeFormatter);

令我困惑的是为什么我必须在这里添加一个 mediaTypeFormatter。我在 global.asax 级别添加了媒体类型格式化程序。

谢谢!

4

1 回答 1

65

HttpResponseMessage<T>Beta 版后被移除。现在,HttpResponseMessage我们有一个 typed 而不是 typedObjectContent

如果您HttpResponseMessage使用其默认的无参数构造函数手动创建,则没有可用于执行内容协商的请求上下文 - 这就是您需要指定格式化程序或手动执行内容协商的原因。

我知道你不想这样做 - 所以改用这个:

HttpResponseMessage response = Request.CreateResponse<MyObject>(HttpStatusCode.OK, objInstance);

这将创建依赖于针对请求执行的内容协商的响应消息。

最后,您可以在此链接上阅读有关内容协商的更多信息

于 2012-09-24T12:03:35.457 回答