Если клиенты отправляют данные на неподдерживаемом типе носителя на HTTP-сервер, сервер отвечает со статусом " 415 неподдерживаемый тип носителя". Но как сообщить клиенту, какие типы носителей поддерживаются? Есть ли стандарт или, по крайней мере, рекомендуемый способ сделать это? Или это просто будет написано в тело ответа как текст?
Укажите поддерживаемые типы носителей при отправке "415 неподдерживаемых типов носителей"
Ответ 1
В этом случае нет никакой спецификации для того, что делать в этом случае, поэтому ожидайте, что реализации будут повсюду. (Было бы разумно, если бы ответ сервера включал что-то вроде заголовка Accept:
, поскольку он имеет почти правильную семантику, если в настоящее время находится в неправильном направлении.)
Ответ 2
Я считаю, что вы можете сделать это с помощью глагола OPTIONS
Http.
Также может использоваться код состояния 300 Multiple Choices
, если ваш сценарий подходит для определенного варианта использования. Если они отправляют запрос с заголовком Accept
application/xml
, и вы поддерживаете только text/plain
, и это представление живет с отдельным URL-адресом, тогда вы можете ответить 300 и в заголовке местоположения URL-адресом этого представления. Я понимаю, что это может не соответствовать вашему вопросу, но это еще один возможный вариант.
И из спецификации HTTP:
10.4.7 406 Не приемлемо
Ресурс, идентифицированный запросом, способен генерировать объекты ответа, которые не обладают характеристиками контента, неприемлемыми в соответствии с заголовками accept, отправленными в запросе.
Если это не был запрос HEAD, ответ СЛЕДУЕТ включать объект, содержащий список доступных характеристик сущности и местоположения (ов), из которых пользователь или пользователь может выбрать наиболее подходящий. Формат сущности определяется типом носителя, указанным в поле заголовка Content-Type. В зависимости от формата и возможностей пользовательского агента выбор наиболее подходящего варианта МОЖЕТ быть выполнен автоматически. Однако эта спецификация не определяет какой-либо стандарт для такого автоматического выбора.
Note: HTTP/1.1 servers are allowed to return responses which are
not acceptable according to the accept headers sent in the
request. In some cases, this may even be preferable to sending a
406 response. User agents are encouraged to inspect the headers of
an incoming response to determine if it is acceptable.
Ответ 3
ТЛ; дг;
Отредактировал созданный класс прокси для наследования от Microsoft.Web.Services3.WebServicesClientProtocol
**.
Я столкнулся с этим вопросом, когда искал эту ошибку, поэтому я подумал, что помогу следующему человеку, который может прийти сюда, хотя и не уверен, отвечает ли он на вопрос, как указано. Я столкнулся с этой ошибкой, когда в какой-то момент мне пришлось взять на себя существующее решение, использующее кодировку WSE и MTOM. Это был клиент Windows, вызывающий веб-службу.
К моменту, клиент вызывал веб-службу, где он выдавал бы эту ошибку.
Что-то, что способствовало разрешению этой ошибки, заключалось в проверке прокси-класса веб-службы, который по-видимому генерируется по умолчанию для наследования с System.Web.Services.Protocols.SoapHttpClientProtocol
.
По сути, это означало, что на самом деле он не использовал WSE3.
Во всяком случае я вручную отредактировал прокси и изменил его на наследование с Microsoft.Web.Services3.WebServicesClientProtocol
.
BTW, чтобы увидеть сгенерированный прокси-класс в VS, нажмите ссылку в Интернете, а затем нажмите кнопку "Показать все файлы" на панели инструментов. Ссылка .cs - это место радости!
Надеюсь, что это поможет.
Ответ 4
В своей книге "Руководство для разработчиков HTTP" на странице 81 Крис Шифлетт объясняет, что означает 415, а затем он говорит: "Тип содержимого, используемый в содержании ответа HTTP, должен указываться в заголовке объекта Content-Type."
1) Итак, Content-Type - это возможный ответ? Предположительно, это будет список разделяемых типов содержимого, разделенный запятыми. Очевидная проблема с этой возможностью заключается в том, что Content-Type является заголовком объекта, а не заголовком ответа.
2) Или это опечатка в книге? Он действительно хотел сказать "HTTP-запрос"?