0

Microsoft.Data.OData.dll,v5.6.1.0 中的类ODataMessageWriter接受构造函数,该构造函数IODataRequestMessage requestMessageIODataResponseMessage responseMessage. 问题是何时使用其中一种。

我正在使用 ODataMessageWriter 手动实现 OData 服务,我想根据请求中的标头来正确获取响应的标头...但似乎需要大量手动编码才能获取所有标头对(接受、内容类型、DataServiceVersion 等)...我错过了什么吗?

4

1 回答 1

1

如果您正在编写的 HTTP 消息是响应消息(即来自服务器),那么您将使用 IODataResponseMessage。如果您从客户端构造消息,您将使用 IODataRequestMessage。听起来您正在编写服务器,因此您应该在创建写入器时使用 IODataResponseMessage 并在创建读取器时使用 IODataRequestMessage 。

没错,直接使用 ODataLib 会涉及很多工作。当您想要/需要编写自己的服务器并需要一个知道如何序列化 OData 有效负载格式的组件时,ODataLib 非常有用。如果您不需要对服务器进行如此高度的控制,我建议您使用 ASP.Net Web API 的 OData 实现,它实际上在后台使用 ODataLib。

话虽如此,如果您从请求中给它 Accept 标头,ODataLib 可以计算出要响应的 Content-Type。您只需要在编写器设置上调用 SetContentType :

var settings = new ODataMessageWriterSettings();
settings.SetContentType(
  "application/json;q=.4, text/html", // Accept
  "iso-8859-5, unicode-1-1;q=0.8"     // Accept-Charset
);
于 2014-04-09T00:08:38.483 回答