有一个网站使用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('')
});
答案 0 :(得分:0)
原因是AJAX请求指定的内容类型为&#34; charset = utf-8&#34; ,而不是&#34; charset = UTF-8&# 34; ,所以资本化带来了不同。作为参考,大写版本是正确的版本,但两者都应该有效。
这不是Chrome自动出价的问题,但对于Firefox和其他未更改大小写的浏览器,请求最终会出现HTTP 400错误请求错误。显然,WCF服务只能接受奇怪的大写版本。除了更改AJAX请求之外,是否有人知道是否有另一种方法可以使WCF服务接受小写版本?