来自基于OWIN的WebAPI的飞行前选项CORS令牌请求有400错误

时间:2015-06-14 06:52:04

标签: google-chrome asp.net-web-api cors owin

真的很奇怪。

我尝试向WebAPI2(基于OWIN)发出CORS请求以获取身份验证令牌。

每隔一次都会失败。像第一个请求失败,但第二个请求将通过。而第3次失败,但第4次会失败。

我不明白为什么它工作了一半时间。

我检查浏览器请求(chrome)。

失败的人总是选择OPTIONS方法。经历过的人总是通过POST。

但我总是使用标题'Content-Type'的post方法:'application / x-www-form-urlencoded'

所以我想这个问题是为什么Chrome / fire fox有时会发送预检请求,但有时却没有。[/ p> 顺便说一句,它在IE中完全正常。

1 个答案:

答案 0 :(得分:1)

Chrome和FireFox都使用预检OPTIONS请求,这是正确的。因此,在执行POST之前,Chrome / FireFox会使用OPTIONS动词发送请求。如果它没有从服务器收到回复,告知浏览器允许发送跨域请求,那么您将收到错误,后续的POST将不会发布。

您必须在web.config中启用OPTIONS(或使用本文中列出的方法之一): http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

对于web.config,请尝试:

<httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS,PUT"/>
        <add name="Access-Control-Allow-Headers" value="Content-Type, Accept"/>            
      </customHeaders>

IE在采用CORS标准方面进展缓慢,因此IE在没有启用OPTIONS的情况下工作正常。