Кажется, что ASMX неявно не допускает глагол OPTIONS.Я публикую этот вопрос, потому что я использую JQuery AJAX-вызовы с POST, который сначала запрашивает у сервера доступные OPTIONS до того, как будет выпущен глагол POST **.
По умолчанию Web.config отображает все глаголы в устаревший ASMXКак показано в этом частичном примере конфигурации, все должно быть правильно маршрутизировано:
<system.webServer>
<requestFiltering>
<verbs>
<add verb="OPTIONS" allowed="true"/>
<add verb="GET" allowed="true"/>
<add verb="POST" allowed="true"/>
</verbs>
</requestFiltering>
<handlers>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Однако 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 по своей сути без ошибок?
Другие идеи Iрассматривал
Я могу найти способ сказать jQuery.ajax(..)
не выдавать глагол ОПЦИИ перед POST?
Если то, что я спрашиваю у устаревшего ASMX, невозможно, я рассмотрел две другие потенциальные идеи:
- реализовать
System.Web.IHttpHandler
,вставьте его в раздел web.config handlers
, чтобы управлять только verbs=OPTIONS
запросами к path=*.asmx
вне поведения по умолчанию ASMX.Это был бы выполнимый обходной путь. - Я могу переключиться на использование WCF.Однако я хочу знать, слишком ли громоздок ASMX.
Прежде чем предпринять какие-либо действия, я хочу попросить сообщество о вещах, которые я мог упустить, или о лучших вариантах (без каламбура).
ОБНОВЛЕНИЕ # 1
Да, мой веб-сервис размещен в другом домене.По-видимому, существует множество проблем, по которым нужно ориентироваться в рамках одной и той же исходной политики.Это обновление определенно является полезной информацией в контексте вопроса, учитывая все обстоятельства!
Однако я хочу убедиться, что этот вопрос остается на уровне сервера ASMX и HTTP.Хотя в ближайшем будущем я могу столкнуться с проблемами, связанными с браузером, они не имеют отношения к решению уровня протокола HTTP этого вопроса.Благодарю.