获得401的选项,但是当我使用Fiddler时却没有?

时间:2016-03-21 00:06:51

标签: c# asp.net asp.net-web-api cors options

我目前正在摸不着头脑,因为当我尝试发布数据时,我的浏览器(chrome)会自动发送OPTIONS请求,但此请求由IIS express(Visual Studio中的本地开发人员)获取401。这个问题是间歇性的,但现在看来它总是发生,而且我知道造成它的原因。

当我试图为自己解决问题时,虽然我得到了奇怪的结果......我打开小提琴,突然OPTIONS请求没有问题。请求中唯一的不同之处如下:

(OPTIONS HEADER WITHID FIDDLER)

OPTIONS /api/users/skill HTTP/1.1
Host: localhost:65121
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: PUT
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36
Access-Control-Request-Headers: accept, content-type
Accept: */*
Referer: http://localhost:3000/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

我正在使用标签<这是不同的>当标题中的信息不同时,即

<this is different>the header info here has changed</this is different>

(带有FIDDLER的选项标题)

OPTIONS <this is different>http://localhost:65121</this is different>/api/users/skill HTTP/1.1
Host: localhost:65121
<this is different>Proxy-</this is different>Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: PUT
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36
Access-Control-Request-Headers: accept, content-type
Accept: */*
Referer: http://localhost:3000/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

这两个请求的唯一区别在于,由于任何原因,通过代理的API调用具有用于Connection的不同标头,并且它将完全限定的地址作为选项请求的一部分发送。虽然如此,两者都会转到API的端口。

有没有人经历过这个或者有任何想法为什么把代理人放在middles打破它?

web.config - &gt; http://pastebin.com/CgWVzAvm

2 个答案:

答案 0 :(得分:0)

请检查IIS服务器上是否启用了PUT谓词。默认情况下,在IIS服务器中,将禁用诸如put,delete之类的动词  For enabling the verbs

尝试对相同的方法使用post动词,看看它是否通过。

答案 1 :(得分:0)

将请求代理到Bitbucket服务器时出现相同的问题。

对我来说,解决方案是删除 Origin 标头