Подтвердить что ты не робот

Поддержка CORS для PUT и DELETE с помощью веб-API ASP.NET

Я работаю с окончательной версией ASP.NET Web API для реализации JavaScript-API. В разных учебниках я включил CORS в свой web.config:

<system.webServer>
 <httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
 </httpProtocol>
</system.webServer>

С учетом вышеперечисленных запросов кросс-домена GET и POST работают нормально, но запросы PUT и DELETE не работают.

В Chrome:

Метод PUT не разрешен методами Access-Control-Allow-Methods.

Метод DELETE не разрешен методами Access-Control-Allow-Methods.

Есть ли что-то дополнительное для того, чтобы получить команды PUT и DELETE, работающие в кросс-домене?

4b9b3361

Ответ 1

Похоже, что добавлен другой настраиваемый заголовок:

<system.webServer>
 <httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
  </customHeaders>
 </httpProtocol>
</system.webServer>

Ответ 2

Кроме того, помимо ответа Натана, убедитесь, что вы отключили модуль WebDAV IIS и установили параметр runAllManagedModulesForAllRequests="true" в файле web.config:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <remove name="WebDAVModule"/>
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

Без этого предполетные запросы CORS (которые используются для методов PUT, DELETE и отправки дополнительного запроса OPTIONS) не будут работать.

Ответ 3

Очень простое решение для решения проблемы CORS в WEBAPI2.2.

Добавьте в конфигурационный файл WebApi следующее:

var cors = new EnableCorsAttribute("*", "*", "*");
Config.EnableCors(cors);

Перед добавлением этого убедитесь, что вы удаляете пользовательский заголовок в файле Web.config.

    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Credentials" value="true" />
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, X-Token" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />

Если у вас есть и пользовательский заголовок, а CORS включен в WebApiconfig, вы столкнетесь с ошибкой cors.

Включение конфигурации cors в конфигурации WebApi решит проблему.

Ответ 4

Пожалуйста, используйте это в web.config при развертывании вашего приложения, не используйте его в локальном web.config

    <system.webServer>
  <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
      </customHeaders>
    </httpProtocol>
 <ModSecurity enabled="false" configFile="C:\inetpub\wwwroot\owasp_crs\modsecurity.conf" />
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>

  </system.webServer>