这是另一个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
答案 0 :(得分:1)
如何使用web.config或iis更改来完成此工作?
我担心仅仅更改这些文件可能无法实现。例如,如果您使用的是ASP.NET Web API(您似乎根据问题中使用的标记使用它),您可以查阅following tutorial
,说明您需要对源代码进行必要的更改启用CORS。
长话短说,从源代码控制中获取此Web应用程序的代码,将config.EnableCors();
调用添加到bootstrapping部分,并使用{{1}来装饰需要使用CORS访问的控制器/操作}属性。然后推回您在源代码管理中所做的更改,触发构建并让持续交付执行其余操作并将更改部署到目标环境。然后你可以享受CORS。
有趣的是,Get call有效。只有帖子不起作用。
这是完全正常的,大多数常见的浏览器根本不会对GET AJAX调用做出飞行前请求,因为那些被认为是安全的 - 那些不应该修改任何服务器端状态以便允许它们。