我正在尝试使用新的WebAPI beta 构建一个 Web 服务,我可以使用OData 查询字符串约定进行查询,并让它返回OData 格式的 Json。我还想使用 OData 2.0(而不是 1.0)。
虽然它看起来不支持$select选项并且标头似乎能够覆盖$format选项,但返回一个IQueryable
泛型似乎为我需要的大多数其他查询选项提供了支持。
我真正苦苦挣扎的是如何最好地提供符合 OData 2.0 规范的 Json 对象。WebAPI 在查询时只返回正常的 Json 数据。例如,如果我执行类似这样的 GET 请求......
http://localhost:XXXXX/vendor/?$filter=RONUMBER eq '2597385'&$select=VENDORID,VENDORNAME&$top=1&$format=Json
..为了在我的开发机器上获得与指定 RONumber 匹配的最高命中,我收到包含以下 Json 的响应...
[{"MEPartNumber":"11-2222-3-4444","MFGPartNumber":"123456-123","MFGSerialNumber":"ABC123","RONumber":"987654321","VendorId":"1234567","VendorName":"ACME SERVICE CENTER"}]
我需要符合 OData 2.0 规范的 Json。更像这样的东西。。
OData V2: {
"d" : {
"results": {
"__metadata": {
"uri": "http://someserver/foo/vendor(1)",
"type": "Vendor"
},
"MEPartNumber": "11-2222-3-4444",
"MFGPartNumber": "123456-123",
"MFGSerialNumber": "ABC123",
"RONumber":"987654321",
"VendorId":"1234567",
"VendorName": "ACME SERVICE CENTER"
}
}
}
我想我可以编写一个自定义MediaTypeFormatter
来获得我想要的结构。我也许还可以修改返回的对象以模仿所需 Json 的结构。除了这两个选项之外,有没有人知道让 WebAPI 给我 OData 2.0 格式的 Json 对象的聪明方法?