代码之家  ›  专栏  ›  技术社区  ›  Alex

WebAPI 2-CORS不适用于contentType application/json

  •  4
  • Alex  · 技术社区  · 11 年前

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

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

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

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

    然而

    如果我移除

    contentType:“application/json”

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

    我的设置中遗漏了什么吗?

    3 回复  |  直到 11 年前
        1
  •  3
  •   Alan McBee    11 年前

    您可以将Options方法添加到控制器中,该方法总是返回而不出错,也可以添加

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

    属性设置为控制器的PostXXX方法。

        2
  •  3
  •   Ray Nicholus    11 年前

    对于该内容类型,浏览器将对请求进行预处理。这意味着浏览器最初将发送OPTIONS请求,并且只有在服务器对飞行前做出适当响应时才会发送基本请求。因此,该错误是由您的服务器拒绝飞行前(OPTIONS)请求引起的。您要么需要在服务器端处理预处理请求,要么只发送一个“简单”的跨源请求,确保浏览器不会预处理请求。更多 preflighting section of the MDN article on CORS .

        3
  •  2
  •   gutun    8 年前

    唯一的 内容类型 不会触发CORS飞行前请求的值为 文本/纯文本 , 多部分/表单数据 , 应用程序/x-www-form-urlencoded .