Nat*_*lor 35 asp.net cross-domain cors asp.net-web-api
我正在使用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>
Run Code Online (Sandbox Code Playgroud)
有了上述,跨域GET和POST请求工作正常,但PUT和DELETE请求都失败.
在Chrome中:
Access-Control-Allow-Methods不允许使用方法PUT.
Access-Control-Allow-Methods不允许使用DELETE方法.
是否需要一些额外的东西来让PUT和DELETE动词跨域工作?
Nat*_*lor 48
它看起来像添加另一个自定义标头排序:
<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>
Run Code Online (Sandbox Code Playgroud)
why*_*eee 25
此外,除了Nathan的答案,请确保您runAllManagedModulesForAllRequests="true"
在web.config中禁用了WebDAV IIS模块并设置了设置:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
如果没有这个,预检CORS请求(用于PUT,DELETE方法和发送额外的OPTIONS请求)将不起作用.
小智 9
解决WEBAPI2.2中CORS问题的非常简单的解决方案.
在WebApi配置文件中添加以下内容.
var cors = new EnableCorsAttribute("*", "*", "*");
Config.EnableCors(cors);
Run Code Online (Sandbox Code Playgroud)
在添加之前,请确保删除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" />
Run Code Online (Sandbox Code Playgroud)
如果您同时拥有自定义标题以及在WebApiconfig中启用CORS,您将面临cors错误.
添加在WebApi配置中启用的cors将解决问题.
归档时间: |
|
查看次数: |
46181 次 |
最近记录: |