我正在使用ASP.NET Web API的最终版本来实现一个JavaScript友好的API。根据各种教程,我在web.config中启用了CORS:
<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中:
Access-Control-Allow-Methods不允许使用方法PUT。
Access-Control-Allow-Methods不允许使用DELETE方法。
是否还需要一些额外的功能才能让PUT和DELETE动词跨域工作?
答案 0 :(得分:25)
此外,除了Nathan的回答,请确保您已禁用WebDAV IIS模块并在web.config中设置runAllManagedModulesForAllRequests="true"
设置:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
如果没有这个,preflight CORS requests(用于PUT,DELETE方法并发送额外的OPTIONS请求)将无效。
答案 1 :(得分:9)
非常简单的解决方案,以克服WEBAPI2.2中的CORS问题。
在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" />
如果您同时拥有自定义标题以及在WebApiconfig中启用CORS,您将面临cors错误。
添加在WebApi配置中启用的cors将解决问题。
答案 2 :(得分:0)
请在部署应用程序时在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>
答案 3 :(得分:0)
尝试注释以下行:<remove name="OPTIONSVerbHandler" />
标签中的<handlers>