我一直在这里发疯,试图让 jquery.ajax 与 ie9 一起工作。所以我有一个实现 CORS 的 ASP Web API 2 Rest API。来自所有浏览器的 CORS 请求都有效。IE9 没有工作,因为它使用 XDomainRequest。通过为 IE9 定制 ajaxTransport 实现,我设法让它也能正常工作。
现在 GET 请求似乎工作正常。但是当我从 IE9 发出一个 post 请求时,我收到一个 HTTP 错误 415 - 不支持的媒体类型。
我已将内容类型设置为:“application/json”,并且我也尝试过“application/x-www-form-urlencoded”,但据我了解,XDomainRequest 不支持带有自定义标头的所有内容?有人知道是否需要在 WebAPI 上设置一些特定的东西还是我需要调整请求?
我的请求如下所示:
$.ajax({
url: hostname + "/api/DDC/Book",
type: "POST",
contentType: "application/json",
data: {
DealID: function () {
return viewModel.get("DealID");
},
LocationID: function () {
return viewModel.get("LocationID");
},
Time: function () {
return viewModel.get("selectedDateTime.Time");
}
}
})
在服务器上我有这个:
[HttpPost("DDC/Book")]
[EnableCors(origins: "*", headers: "*", methods: "POST, GET, OPTIONS, PUT, DELETE")]
public dynamic Post(BookModel model)
{
.........
当我在 IE 调试器中分析失败的请求时,这是发出的请求标头:
Key Value
Request POST //api/DDC/Book HTTP/1.1
Accept */*
Origin http://myurl.com
Accept-Language hr-HR
Accept-Encoding gzip, deflate
User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Host www.somehost.com
Content-Length 55
DNT 1
Connection Keep-Alive
Cache-Control no-cache
我真的在这里失去了所有希望,IE 让我发疯了(该死的微软:D),所以任何帮助或建议都非常受欢迎。
编辑:通过更多研究,我发现 WebAPI 需要一种内容类型才能工作,而 XDomainRequest 不会发出。因此,我看到的唯一解决方案是在未设置任何内容时调整我的 webapi,使其具有默认的内容类型。虽然还不知道怎么做
EDIT2:通过将我所有的 POST 转换为 GET 暂时破解了我的方法,不知道这有多聪明,但我现在看不出有更大的问题,所以在我解决问题之前它会起作用