4

我有一个带有Booking控制器的 Asp.net WebApi 2 项目

如果我尝试从我的客户端 js 发布这个:

$.ajax({
            url: 'http://localhost:57517/api/booking',
            type: 'POST',
            crossDomain:true,
            data: {AdultPaxCount:1},
            contentType: "application/json"
        });

我收到一个不允许的错误(并且Post我的操作BookingController未命中)

然而;

如果我删除

内容类型:“应用程序/json”

部分,它“工作”(它被发送到控制器)

我的设置中缺少什么吗?

4

3 回答 3

3

使用该内容类型,浏览器将预检请求。这意味着浏览器最初会发送一个 OPTIONS 请求,并且只有在您的服务器对预检做出适当响应时才会发送底层请求。因此,该错误是由您的服务器拒绝预检 (OPTIONS) 请求引起的。您将需要在服务器端处理预检请求,或者通过仅发送“简单”跨域请求来确保浏览器不会预检请求。有关CORS 的 MDN 文章的预检部分中的更多内容。

于 2013-10-30T18:46:19.963 回答
3

你可以添加一个 Options 方法到你的控制器中,它总是返回没有错误,或者添加

[HttpOptions]
[AcceptVerbs("POST", "OPTIONS")]

控制器的 PostXXX 方法的属性。

于 2013-11-19T23:20:12.873 回答
2

唯一不会触发 CORS 预检请求的Content-type值是text/plainmultipart/form-dataapplication/x-www-form-urlencoded

于 2016-10-20T05:22:58.393 回答