请求的资源不支持http方法'OPTIONS'。“

时间:2016-03-29 20:19:14

标签: ajax iis asp.net-web-api web-config cors

这是另一个CORS问题。我有一个奇怪的问题 我有一个旧的申请。我可以访问inetpub而不是源代码(只有dlls和web.config) 因此,在我进行任何POST调用之前,有一个正在进行的预检调用,不知何故,服务器现在允许选项发生。

如何使用web.config或iis更改来完成此工作?

有趣的是,Get call有效。只有帖子不起作用。

我在api

的Web.config中添加了以下内容
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />

在我的测试应用程序中,当我尝试调用api时,我在请求标头中发送以下内容

OPTIONS http://OldWebApiurl HTTP/1.1
Host: http://Oldwebapi.host
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://TestSite
User-Agent: Mozilla/5.0 (Windows NT 10.0; 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://testsite/page
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

1 个答案:

答案 0 :(得分:1)

  

如何使用web.config或iis更改来完成此工作?

我担心仅仅更改这些文件可能无法实现。例如,如果您使用的是ASP.NET Web API(您似乎根据问题中使用的标记使用它),您可以查阅following tutorial,说明您需要对源代码进行必要的更改启用CORS。

长话短说,从源代码控制中获取此Web应用程序的代码,将config.EnableCors();调用添加到bootstrapping部分,并使用{{1}来装饰需要使用CORS访问的控制器/操作}属性。然后推回您在源代码管理中所做的更改,触发构建并让持续交付执行其余操作并将更改部署到目标环境。然后你可以享受CORS。

  有趣的是,Get call有效。只有帖子不起作用。

这是完全正常的,大多数常见的浏览器根本不会对GET AJAX调用做出飞行前请求,因为那些被认为是安全的 - 那些不应该修改任何服务器端状态以便允许它们。