Можно ли настроить ASMX для ответа на запрос HTTP 1.1 OPTIONS? - PullRequest
6 голосов
/ 21 ноября 2011

Кажется, что 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, невозможно, я рассмотрел две другие потенциальные идеи:

    1. реализовать System.Web.IHttpHandler,вставьте его в раздел web.config handlers, чтобы управлять только verbs=OPTIONS запросами к path=*.asmx вне поведения по умолчанию ASMX.Это был бы выполнимый обходной путь.
    2. Я могу переключиться на использование WCF.Однако я хочу знать, слишком ли громоздок ASMX.

Прежде чем предпринять какие-либо действия, я хочу попросить сообщество о вещах, которые я мог упустить, или о лучших вариантах (без каламбура).

ОБНОВЛЕНИЕ # 1

Да, мой веб-сервис размещен в другом домене.По-видимому, существует множество проблем, по которым нужно ориентироваться в рамках одной и той же исходной политики.Это обновление определенно является полезной информацией в контексте вопроса, учитывая все обстоятельства!
Однако я хочу убедиться, что этот вопрос остается на уровне сервера ASMX и HTTP.Хотя в ближайшем будущем я могу столкнуться с проблемами, связанными с браузером, они не имеют отношения к решению уровня протокола HTTP этого вопроса.Благодарю.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Похоже, что это не применимо, потому что я не вижу этого в вопросе, но мой ответ на это состоял в том, что в веб-конфигурации мне пришлось удалить инструкцию до <remove name="OPTIONSVerbHandler" />

Престижностьчеловеку, который разместил его ближе к концу этого вопроса SO

0 голосов
/ 21 ноября 2011

Я не знаю, что ASMX когда-либо мог обрабатывать OPTIONS, даже для запросов AJAX.Что именно вы хотите вернуть в случае с глаголом OPTIONS?Что намерен клиент использовать OPTIONS?

Кроме того, я рассмотрел это с точки зрения ASP.NET, работающего с глаголом OPTIONS.В моем случае это было запрещено на уровне корневого web.config, а не на уровне ASP.NET или ASMX.Отображение по умолчанию для этого глагола:

<add path="*" verb="*" type="System.Web.HttpMethodNotAllowedHandler" validate="True" />

Это соответствует полученной вами ошибке 405.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...