How do I accept CORS AJAX requests on AppHarbor?
我正在使用thinkcture.identitymodel nuget包为MVC Web应用程序中的WebAPI控制器启用CORS。目前,我只担心帖子,但如果其他动词有任何问题,请告诉我。这在通过IIS Express服务器运行时有效。
在处理AppHarbor部署时,它不起作用。nginx似乎没有将选项请求传递给我的代码。在AppHarbor上运行它还需要什么?
请求OPTIONS $path HTTP/1.1
Host: $servername
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://www.local
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17
Access-Control-Request-Headers: accept, origin, content-type
Accept: /
Referer: http://www.local/wordpress/2013/01/request-url-test/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
响应
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 30 Jan 2013 02:34:14 GMT
Content-Length: 0
Connection: keep-alive
Allow: OPTIONS, TRACE, GET, HEAD, POST
Public: OPTIONS, TRACE, GET, HEAD, POST
我的web.config使用以下默认处理程序进行设置:
1 2 3 4 5 6 7 8 | <handlers> <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> </handlers> |
是WebDAV的责任吗?
在Jeffery to的建议下,我按照这些说明禁用了WebDAV。甚至不知道在啊上安装了WebDAV,但这样做确实改变了我的结果。
相关web.config节1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <handlers> <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> <remove name="WebDAV" /> </handlers> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule"/> <remove name="AspNetAppHarborIntegration" /> </modules> |
请求
OPTIONS $path HTTP/1.1
Host: $servername
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://www.local
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17
Access-Control-Request-Headers: accept, origin, content-type
Accept: /
Referer: http://www.local/wordpress/2013/01/request-url-test/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
响应
HTTP/1.1 405 Method Not Allowed
Server: nginx
Date: Mon, 04 Feb 2013 17:09:19 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 76
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
WebDAV是导致响应中没有完整CORS头的最初问题的原因。405错误是我的应用程序配置中的某个问题。
在深入研究了内部结构之后,似乎用于WebAPI(由thinkcture提供)的corsmessagehandler没有正确识别飞行前请求,并且这些请求被路由到WebAPI对象本身。
我通过移动到IIS模块而不是WebAPI模块来解决这个问题。这可能会使未来的生活更加困难,但至少是可行的。
我可能在这里遗漏了一些内容,但是根据您所包含的示例响应,似乎