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
);