在POST请求期间,无法在IE 8中将内容类型设置为ajax请求标头

时间:2014-09-30 08:51:45

标签: javascript jquery ajax content-type asp.net-web-api2

我正在使用Jquery DataTable。并使用这样的ajax调用( CROSS DOMAIN Request )来获取数据:

ajax: {
    url: url,
    type: 'POST',
    dataType: 'json',
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8'
  }

这是标题 IE 8

中查找此请求的方式
Key Value
Request POST /api/data HTTP/1.1
Accept  */*
Origin  http://localhost:5000
Accept-Language en-US
Accept-Encoding gzip, deflate
User-Agent  Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)
Host    localhost:5555
Content-Length  3647
DNT 1
Connection  Keep-Alive
Cache-Control   no-cache 

Jquery DataTable会自动将内容发布到服务器。但当通过IE 8发送请求时,服务器未在HttpContext.Current.Request.Form对象中接收任何数据。我使用下面的代码来读取服务器发布的数据。

            var formData = HttpContext.Current.Request.Form;
            var direction = formData["order[0][dir]"];
            var draw = Convert.ToInt32(formData["draw"]);
            var length = Convert.ToInt32(formData["length"]);
            var start = Convert.ToInt32(formData["start"]);

如果我通过chrome或FireFox发布请求,我会在服务器上获取数据。 当请求通过IE 8时,未设置内容类型标头。我认为这就是服务器端没有数据的原因。请帮助!!

2 个答案:

答案 0 :(得分:0)

您正在设置dataType而不是contentType。根据{{​​3}},您需要在设置浏览器发送内容时使用contentType,并在指定浏览器期望接收内容时使用dataType

  

contentType(默认值:' application / x-www-form-urlencoded;   字符集= UTF-8&#39)

     

类型:字符串

     

将数据发送到服务器时,请使用此内容类型。默认是   "应用程序/ X WWW的窗体-urlencoded; charset = UTF-8",这很好   大多数情况下。如果您明确地将内容类型传递给$ .ajax(),那么   它总是被发送到服务器(即使没有数据发送)。 W3C   XMLHttpRequest规范规定charset始终是   UTF-8;指定另一个charset不会强制浏览器更改   编码。注意:对于跨域请求,请设置内容   键入application / x-www-form-urlencoded以外的任何内容,   multipart / form-data或text / plain将触发浏览器发送   预检OPTIONS请求到服务器。

答案 1 :(得分:0)

要回答我自己的问题,在服务器端,我现在正在阅读这样的表单数据:

var formData = HttpUtility.ParseQueryString(await Request.Content.ReadAsStringAsync());

之前我试图读取这样的数据:var formData = HttpContext.Current.Request.Form;

this link第4点所述,IE 8不会在请求标头中发送contentType。该链接还讨论了手动读取请求正文,这就是我现在正在做的事情。