3 回答
TA贡献1909条经验 获得超7个赞
正如Daniel A. White在他的评论中所说,OPTIONS请求很可能是由客户端创建的,作为跨域JavaScript请求的一部分。这是由跨源资源共享(CORS)兼容的浏览器自动完成的。该请求是初步请求或飞行前请求,在实际AJAX请求之前进行,以确定CORS支持哪些请求动词和标头。服务器可以选择不支持,不支持全部或某些HTTP动词。
为了完成图片,AJAX请求具有一个附加的“ Origin”标头,该标头标识了从何处提供托管JavaScript的原始页面。服务器可以选择支持来自任何来源的请求,或者仅支持一组已知的可信来源的请求。允许任何来源都是安全风险,因为这样做会增加跨站请求伪造(CSRF)的风险。
因此,您需要启用CORS。
这是解释如何在ASP.Net Web API中执行此操作的链接
http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api#enable-cors
此处描述的实现可让您指定其他内容
针对每个动作,每个控制器或全局的CORS支持
支持的来源
启用CORS aa控制器或全局级别时,支持的HTTP动词
服务器是否支持通过跨域请求发送凭据
通常,此方法可以正常工作,但您需要确保已意识到安全风险,尤其是在允许来自任何域的跨源请求的情况下。在允许这样做之前,请仔细考虑。
关于哪种浏览器支持CORS,维基百科表示以下引擎支持它:
壁虎1.9.1(FireFox 3.5)
WebKit(Safari 4,Chrome 3)
MSHTML / Trident 6(IE10),在IE8和9中部分支持
普雷斯托(歌剧12)
http://en.wikipedia.org/wiki/Cross-origin_resource_sharing#Browser_support
TA贡献1848条经验 获得超10个赞
迈克·古德温(Mike Goodwin)的回答很棒,但是当我尝试使用它时,它似乎是针对MVC5 / WebApi 2.1的。Microsoft.AspNet.WebApi.Cors的依赖性在我的MVC4项目中不能很好地发挥作用。
下面是使用MVC4在WebApi上启用CORS的最简单方法。
请注意,我已允许所有操作,建议您将Origin限制为只希望您的API服务的客户端。允许一切都存在安全风险。
Web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
</customHeaders>
</httpProtocol>
</system.webServer>
BaseApiController.cs:
我们这样做是为了允许使用OPTIONS http动词
public class BaseApiController : ApiController
{
public HttpResponseMessage Options()
{
return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
}
}
- 3 回答
- 0 关注
- 707 浏览
添加回答
举报