Похоже, что ASMX неявно не разрешает глагол OPTIONS. Я отправляю этот вопрос, потому что я использую вызовы jQuery AJAX с POST, которые сначала запрашивают у сервера доступные ОПЦИИ до того, как будет выдана команда POST **.
По умолчанию Web.config сопоставляет все команды с устаревшим ASMX, как показано в этом частичном примере конфигурации, поэтому все должно маршрутизироваться правильно:
Однако HTTP-ответ всегда 405 для запроса OPTIONS. Например, дается следующий запрос:
OPTIONS http://localhost:35920/MarkupTransfomer.asmx HTTP/1.1
Host: localhost:35920
Access-Control-Request-Method: POST
и всегда приводит к следующему:
HTTP/1.1 405 Method Not Allowed
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Вызов jQuery AJAX выглядит следующим образом, рекомендация из недавнего сообщения в блоге Encosia по работе с ASMX:
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "http://localhost:35920/MarkupTransfomer.asmx",
data: "{'hi'}",
dataType: "json"
});
** Примечание : я не хочу переключать клиента на использование GET вместо POST.
Сводный вопрос:
Могу ли я настроить ASP.NET, чтобы разрешить ASMX обрабатывать запросы OPTIONS без ошибок?
Я могу найти способ сказать jQuery.ajax (..)
не выдавать глагол OPTIONS перед POST?
Если то, что я прошу от устаревшего ASMX, невозможно, я рассмотрел две другие потенциальные идеи:
System.Web.IHttpHandler
, вставить его в web.config Раздел обработчиков
для управления только запросами verbs = OPTIONS
к path = *.asmx
за пределами стандартного поведения ASMX. Это было бы возможным обходным путем. Прежде чем действовать, я хочу спросить у сообщества, что я мог упустить из виду, или найти лучшие варианты (без слов).
Да, моя веб-служба размещается в другом домене. По-видимому, существует множество проблем, связанных с использованием той же исходной политики. Это обновление определенно является полезной информацией в контексте вопроса, учитывая все обстоятельства!
Однако я хочу, чтобы этот вопрос оставался на уровне сервера ASMX и HTTP. Хотя в ближайшем будущем у меня могут возникнуть связанные с этим проблемы с браузером, они не имеют значения для решения этого вопроса на уровне протокола HTTP. Спасибо.