Предварительно выданный запрос не работает в IIS - PullRequest
0 голосов
/ 16 октября 2018

У меня есть веб-клиент, который использует веб-API.это мой запрос:

let peticion = {
        attr1: "0000000047",
        attr2: "070101201"
    };
    $.ajax({
        type: "POST",
        url:"http://161.168.1.33:1210/api/Trabajador/ElTrabajadorYaHaSidoRequeridoEnEsteLocal",
        data: JSON.stringify(peticion),
        contentType: "application/json; charset=utf-8",
        crossDomain: true,
        dataType: "json",
        success: function (data, status, jqXHR) {

        },
        error: function (jqXHR, status) {

        }
    }).then(function (respuesta) {

    });

Cors включен в API CONTROLLER, насколько я знаю, эта строка кода разрешает все (*), но работает только для простого запроса, а не для предварительно выданных запросов.

 [EnableCors(origins: "*", headers: "*", methods: "*")]

, поэтому я получаю следующие две ошибки:

Нет ничего запрещенного в глаголах http в IIS.enter image description here

Я что-то упустил?почему веб-API не обрабатывает предварительно выданные запросы?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Возможно, вам все равно придется удалить IIS OPTIONSVerbHandler по умолчанию, а затем добавить глагол OPTIONS в соответствующий обработчик (и), чтобы запросы могли попасть в ваш API.

, т. Е. Ваш web.configФайл нужно будет отредактировать в соответствии с

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/> 
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
    <remove name="OPTIONSVerbHandler"/>
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0"/>
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0"/>
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
  </handlers>
</system.webServer>

, помните, какие глаголы вы используете, и используйте правильный aspnet_isapi.dll для вас.

0 голосов
/ 16 октября 2018

Я только что решил это, установив в webconfig

<httpProtocol>
<customHeaders>
  <add name="Access-Control-Allow-Methods" value="*" />
  <add name="Access-Control-Allow-Origin" value="*" />
  <add name="Access-Control-Allow-Headers" value="*" />
</customHeaders>

и удалив эту строку:

<!--<remove name="OPTIONSVerbHandler" />-->

В любом случае, когда я удаляю эти таможенные заголовки изwebconfig и я добавляю [EnableCors(origins: "*", headers: "*", methods: "*")] в Api Controller, я получаю только одну ошибку:

Не удалось загрузить http://192.168.1.33:1210/api/Trabajador/ElTrabajadorYaHaSidoRequeridoEnEsteLocal: Ответ на предварительный запрос не проходит проверку контроля доступа: НетЗаголовок «Access-Control-Allow-Origin» присутствует в запрашиваемом ресурсе.Origin 'http://localhost:51939', следовательно, не разрешен доступ.

Я до сих пор не понимаю, в чем разница между включением cors с контроллера Api или с webconfig

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