我有一个带有Booking
控制器
如果我尝试从客户端js发布此信息:
$.ajax({
url: 'http://localhost:57517/api/booking',
type: 'POST',
crossDomain:true,
data: {AdultPaxCount:1},
contentType: "application/json"
});
我收到了一个不允许的错误(我的Post
上的BookingController
操作未被点击)
然而;
如果我删除
contentType:“application / json”
部分,它“有效”(它被发送到控制器)
我在设置中遗漏了什么?
答案 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 强>