Web API 2 - CORS无法使用内容类型application / json

时间:2013-10-30 17:53:24

标签: asp.net-web-api cors

我有一个带有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操作未被点击)

然而;

如果我删除

  

contentType:“application / json”

部分,它“有效”(它被发送到控制器)

我在设置中遗漏了什么?

3 个答案:

答案 0 :(得分:3)

您可以向控制器添加一个选项方法,它始终只返回没有错误,或者添加

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

属性到控制器的PostXXX方法。

答案 1 :(得分:2)

使用该内容类型,浏览器将预检请求。这意味着浏览器最初将发送OPTIONS请求,并且只有在服务器对预检正确响应时才会发送基础请求。因此,错误是由您的服务器拒绝预检(OPTIONS)请求引起的。您将需要处理预检请求服务器端,或者确保浏览器不通过仅发送“简单”跨源请求来预检请求。更多内容见preflighting section of the MDN article on CORS

答案 2 :(得分:2)

唯一不会触发CORS预检请求的内容类型值是 text / plain multipart / form-data ,的应用程序/ x-WWW窗体-urlencoded