我最近遇到了将 Javascript 请求发布到另一个域。默认情况下,不允许将 XHR 发布到其他域。
按照 http://enable-cors.org/ 的说明,我在另一个域上启用了此功能。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
现在一切正常,但是在发回正常工作的 200 响应之前,它仍然返回 405 响应。
Request URL:http://testapi.nottherealsite.com/api/Reporting/RunReport
Request Method:OPTIONS
Status Code:405 Method Not Allowed
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Access-Control-Request-Headers:origin, content-type, accept
Access-Control-Request-Method:POST
Connection:keep-alive
Host:testapi.nottherealsite.com
Origin:http://test.nottherealsite.com
Referer:http://test.nottherealsite.com/Reporting
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
Response Headersview source
Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Methods:GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Origin:*
Allow:POST
Cache-Control:private
Content-Length:1565
Content-Type:text/html; charset=utf-8
Date:Tue, 18 Sep 2012 14:26:06 GMT
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
更新:2014 年 3 月 2 日
MSDN 杂志上有一篇最近更新的文章。详细介绍 ASP.NET Web API 2 中的 CORS 支持。
http://msdn.microsoft.com/en-us/magazine/dn532203.aspx
原文由 Andrew 发布,翻译遵循 CC BY-SA 4.0 许可协议
这很可能是 IIS 7“处理”HTTP OPTIONS 响应而不是您的应用程序指定它的情况。为了确定这一点,在 IIS7 中,
转到您站点的处理程序映射。
向下滚动到“OPTIONSVerbHandler”。
将“协议支持模块”更改为“IsapiHandler”
设置可执行文件:
%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll
现在,当发送 HTTP OPTIONS 动词时,上面的配置条目应该会启动。
或者,您可以在 BeginRequest 方法中响应 HTTP OPTIONS 动词。