Microsoft.Data.OData.ODataMessageWriter используя запрос или ответ?

Класс ODataMessageWriter в Microsoft.Data.OData.dll, v5.6.1.0 принимает конструкторы, которые принимают IODataRequestMessage requestMessage так же как IODataResponseMessage responseMessage, Вопрос в том, когда использовать один или другой.

Я внедряю службу OData вручную с использованием ODataMessageWriter, и я хотел бы получить правильные заголовки моего ответа на основе заголовков в запросе... но, похоже, для получения всех заголовков требуется много ручного кодирования правильно (принять, тип контента, DataServiceVersion и т. д.)... Я что-то упустил?

1 ответ

Решение

Если сообщение HTTP, которое вы пишете, является ответным сообщением (т. Е. С сервера), то вы будете использовать IODataResponseMessage. Если вы создаете сообщение от клиента, вы будете использовать IODataRequestMessage. Похоже, вы пишете сервер, поэтому вы должны использовать IODataResponseMessage при создании писателей и IODataRequestMessage при создании читателей.

Вы правы в том, что при использовании ODataLib требуется много работы. ODataLib отлично подходит, когда вам нужно / нужно написать собственный сервер и вам нужен компонент, который знает, как сериализовать формат полезной нагрузки OData. Если вам не требуется такой высокий уровень контроля над вашим сервером, я бы порекомендовал использовать реализацию OData веб-API ASP.Net, которая фактически использует ODataLib под капотом.

Сказав это, ODataLib может определить Content-Type для ответа, если вы дадите ему заголовок Accept из запроса. Вам просто нужно вызвать 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
);
Другие вопросы по тегам