Укажите поддерживаемые типы носителей при отправке «415 неподдерживаемых типов носителей» - PullRequest
12 голосов
/ 27 июля 2010

Если клиенты отправляют данные в неподдерживаемом типе носителя на сервер HTTP, сервер отвечает со статусом « 415 неподдерживаемый тип носителя ». Но как сказать клиенту, какие типы носителей поддерживаются? Существует ли стандартный или хотя бы рекомендуемый способ сделать это? Или это будет просто записано в тело ответа в виде текста?

Ответы [ 4 ]

8 голосов
/ 27 июля 2010

Нет никакой спецификации для того, что делать в этом случае, поэтому ожидайте, что реализации будут повсюду.(Что было бы разумно, если бы ответ сервера включал в себя что-то вроде Accept: заголовка, поскольку он имеет почти правильную семантику, если в настоящее время находится в неправильном направлении.)

0 голосов
/ 01 октября 2014

ТЛ; др; Отредактировал сгенерированный прокси-класс для наследования от Microsoft.Web.Services3.WebServicesClientProtocol**.

Я сталкивался с этим вопросом при устранении этой ошибки, поэтому подумал, что смогу помочь следующему человеку, который может прийти сюда, хотя и не уверен, что он ответит на поставленный вопрос. Я столкнулся с этой ошибкой, когда в какой-то момент мне пришлось взять на себя существующее решение, использующее кодирование WSE и MTOM. Это был клиент Windows, вызывающий веб-сервис.

Кстати, клиент вызывал веб-сервис, где он выдавал эту ошибку. Что-то, что помогло мне решить эту ошибку, заключалось в проверке прокси-класса веб-службы, который, по-видимому, генерируется по умолчанию для наследования от System.Web.Services.Protocols.SoapHttpClientProtocol. По сути это означало, что он фактически не использовал WSE3.

В любом случае Я вручную отредактировал прокси и изменил его на наследование от Microsoft.Web.Services3.WebServicesClientProtocol.

Кстати, чтобы увидеть сгенерированный прокси-класс в VS, щелкните веб-ссылку, а затем нажмите кнопку панели инструментов «Показать все файлы». Reference.cs - место радости!

Надеюсь, это поможет.

0 голосов
/ 13 декабря 2011

В своей книге «Руководство разработчика HTTP» на странице 81 Крис Шифлетт объясняет, что означает 415, а затем говорит: «Тип носителя, используемый в содержимом ответа HTTP, должен быть указан в заголовке сущности Content-Type. «

1) Итак, является ли Content-Type возможным ответом? Предположительно это будет список допустимых типов контента, разделенных запятыми. Очевидная проблема с этой возможностью заключается в том, что Content-Type является заголовком объекта, а не заголовком ответа.

2) Или это опечатка в книге? Он действительно хотел сказать «HTTP-запрос»?

0 голосов
/ 27 июля 2010

Я полагаю, что вы можете сделать это с помощью глагола OPTIONS Http.

Также можно использовать код состояния 300 Multiple Choices, если ваш сценарий соответствует определенному сценарию использования.Если они отправляют запрос с заголовком Accept, равным application/xml, и вы поддерживаете только text/plain, и это представление хранится по отдельному URL-адресу, вы можете ответить 300 и в заголовке Location URL-адрес этого представления.Я понимаю, что это может не совсем соответствовать вашему вопросу, но это еще один возможный вариант.

А из спецификации HTTP:

10.4.7 406 Недопустимо

Ресурс, определенныйзапрос может генерировать только те объекты ответа, которые имеют неприемлемые характеристики содержимого в соответствии с заголовками принятия, отправленными в запросе.

Если это не был запрос 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.
...