用于Firefox / IE的PUT请求上的HTTP 400。适用于Chrome / Opera

时间:2014-10-31 15:41:49

标签: jquery wcf http firefox cors

有一个网站使用jquery在另一个域(Utlising CORS)上调用WCF Web服务。大多数方法都是GET方法,但有一些PUT方法。

所有GET方法在所有浏览器上都能正常运行。 然而, PUT方法仅适用于Chrome和Opera。对于Firefox和Internet Explorer,它们将导致HTTP 400 BAD REQUEST错误。我已经阅读了所有内容并尝试了一切来改变Web服务的CORS设置但没有成功。

如果浏览器能够为某些人而不是其他人完美地工作,那么浏览器可以在多大程度上进行这些PUT调用?

作为参考,web服务Global.asax文件如下所示:

 protected void Application_BeginRequest(object sender, EventArgs e)
    {

        //CORS ENABLED
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");

        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
        {
            //These headers are handling the "pre-flight" OPTIONS call sent by the browser
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Authorization, Origin, Content-Type, Accept, X-Requested-With");
            HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");

            HttpContext.Current.Response.End();

        }
    }

和web.config相关的会话是这样的:

 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
   <httpProtocol>

   </httpProtocol>
  </system.webServer>

有什么想法吗?

编辑:这是jQuery请求:

       addAbs = function addAbs() {
        return $.ajax({
            type: 'PUT',
            url: Constructor.prototype.getServletURL(),
            contentType: "application/json; charset=utf-8",
            headers: {"Origin": "http://app-eservices.talentia-software.com"},
            data: JSON.stringify(newAbsence),
            timeout: GlobalContext.xhrTimeout,
            beforeSend: self.showLoadingDialog('')
        });

1 个答案:

答案 0 :(得分:0)

原因是AJAX请求指定的内容类型为&#34; charset = utf-8&#34; ,而不是&#34; charset = UTF-8&# 34; ,所以资本化带来了不同。作为参考,大写版本是正确的版本,但两者都应该有效。

这不是Chrome自动出价的问题,但对于Firefox和其他未更改大小写的浏览器,请求最终会出现HTTP 400错误请求错误。显然,WCF服务只能接受奇怪的大写版本。除了更改AJAX请求之外,是否有人知道是否有另一种方法可以使WCF服务接受小写版本?