WebApi 2.2 + Chrome = CORS 405错误

时间:2014-09-02 21:02:52

标签: jquery ajax asp.net-web-api cors

我有2个项目设置:

  1. 一个只使用HTML和durandal并使用$ .ajax调用webapi post方法的网站。它位于localhost:33432并调用第二个站点(注意ajax调用没有任何特殊功能,除了Durandal正在添加并使用最新的2.x版本的jquery)< / LI>
  2. 位于localhost:32287上的Web API网站,在global.asax.cs文件中启用了这样的cors:

    GlobalConfiguration.Configuration.EnableCors(new EnableCorsAttribute(&#34; &#34;,&#34; &#34;,&#34; *&#34;)); < / p>

    web.config文件是两个站点的骨库存MVC 5.2.2。完成system.webserver部分中的删除等。

    本地主机上的Internet Explorer没有问题,因为它没有发出OPTIONS请求,因此没有问题。如果将其发布到生产中的单独域,则会发生这种情况。 (我们已尝试过这个)

  3. 另一方面,

    Chrome无法在OPTIONS请求中收回405错误。以下是Chrome发送和接收的内容:

    Remote Address:[::1]:47806
    Request URL:http://localhost:47806/Contacts/ValidateLogin
    Request Method:OPTIONS
    Status Code:405 Method Not Allowed
    Request Headersview parsed
    OPTIONS /Contacts/ValidateLogin HTTP/1.1
    Host: localhost:47806
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache
    Access-Control-Request-Method: POST
    Origin: http://localhost:32287
    User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36
    Access-Control-Request-Headers: accept, content-type
    Accept: */*
    DNT: 1
    Referer: http://localhost:32287/XXXXX
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: en-US,en;q=0.8
    Response Headersview source
    Allow:POST
    Cache-Control:no-cache
    Content-Length:76
    Content-Type:application/json; charset=utf-8
    Date:Tue, 02 Sep 2014 20:59:36 GMT
    Expires:-1
    Pragma:no-cache
    Server:Microsoft-IIS/8.0
    X-AspNet-Version:4.0.30319
    X-Powered-By:ASP.NET
    X-SourceFiles:=?UTF-8?B?RDpcTGluY29sbiBQZWFrXFBNTlxEbnNcTHBwLk5ldHdvcmsuQXBpXENvbnRhY3RzXFZhbGlkYXRlTG9naW4=?=
    

    除此之外,本地GET不会发生这种情况。 Chrome只是在没有OPTIONS的情况下启用它。

    任何想法为什么我会收到此错误并且它不仅仅是通过?

    谢谢!

1 个答案:

答案 0 :(得分:0)

尝试使用--disable-web-security

启动chrome

Ubuntu的 google-chrome --disable-web-security 要么 chrome.exe --disable-web-security 然后再试一次