![]() |
1
51
正如Daniel A.White在评论中所说,OPTIONS请求很可能是由客户机作为跨域JavaScript请求的一部分创建的。这是由跨源资源共享(CORS)兼容浏览器自动完成的。请求是初步的或 飞行前 请求,在实际的AJAX请求之前发出,以确定CORS支持哪些请求谓词和头。服务器可以选择支持无、全部或部分HTTP动词。 为了完成这幅图,AJAX请求有一个额外的“Origin”头,它标识了承载JavaScript的原始页面的服务位置。服务器可以选择支持来自任何来源的请求,或者只支持一组已知的、可信的来源。允许任何来源都是一种安全风险,因为is会增加跨站点请求伪造(CSRF)的风险。 所以,你需要启用CORS。
http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api#enable-cors 这里描述的实现允许您指定
一般来说,这很好,但是您需要确保您知道安全风险,特别是当您允许来自任何域的跨源请求时。在你允许之前仔细考虑一下。 在哪些浏览器支持CORS方面,Wikipedia表示以下引擎支持CORS:
http://en.wikipedia.org/wiki/Cross-origin_resource_sharing#Browser_support |
![]() |
2
90
Mike Goodwin的回答很好,但当我尝试的时候,它似乎是针对MVC5/WebApi 2.1的。 Microsoft.AspNet.WebApi.Cors的依赖关系与我的MVC4项目不太协调。
注意,我已经允许了所有这些,我建议您将源代码限制为您希望API服务的客户机。允许一切都是一种安全风险。
BaseApiController.cs:
|
![]() |
3
22
把这个加到你的
*安全性:请注意,这将启用从任何地方到服务器的ajax请求(如果愿意,您只能允许以逗号分隔的源/url列表)。
我使用当前客户源代码而不是
您还需要在
希望这有帮助 |
![]() |
4
17
在Web API 2项目中遇到相同的问题(由于不值得在这里讨论的原因而无法使用标准CORS包)之后,我通过实现自定义的DelagatingHandler解决了这个问题:
注意,我还在Web.config中启用了CORS头,类似于这里发布的其他一些答案:
注意,我的项目不包括MVC,只有Web API 2。 |
|
5
9
我已经成功地克服了405和404个错误,这些错误仅由global.asax中的自定义代码在飞行前ajax选项请求中抛出
我不得不禁用CORS,因为它返回的“Access Control Allow Origin”头包含多个值。 在web.config中也需要这个:
app.pool需要设置为集成模式。 |
![]() |
6
7
我也有同样的问题。对我来说,修复方法是从jQuery AJAX调用中删除自定义内容类型。自定义内容类型触发飞行前请求。我发现这个:
从本页: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api (在“飞行前请求”项下) |
![]() |
7
3
|
![]() |
8
2
|
![]() |
9
1
我也面临同样的问题。 按照以下步骤解决浏览器中(CORS)遵从性问题。 包括对Web API解决方案的WebActivatorEx引用。
完成这些更改后,我可以在所有浏览器中访问webapi。 |
![]() |
10
1
我也遇到过同样的问题,我就是这样解决的:
|
![]() |
Haim Ohayon · 这些链接之间有什么区别? 2 年前 |