Microsoft.Data.OData.ODataMessageWriter使用请求或响应?

时间:2014-04-08 21:53:04

标签: odata odatalib

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

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

1 个答案:

答案 0 :(得分: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
);