ここで、jquery.ajax を ie9 で動作させようとして夢中になりました。したがって、CORS を実装する ASP Web API 2 Rest API があります。すべてのブラウザからの CORS リクエストが機能します。XDomainRequest を使用するため、IE9 は機能しませんでした。IE9用のajaxTransportのカスタム実装を作成することで、うまく機能させることができました。
現在、GET リクエストは正常に機能しているようです。しかし、IE9 からポスト リクエストを実行すると、HTTP エラー 415 - サポートされていないメディア タイプが発生します。
content-type を「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
私は本当にここですべての希望を失っています.
EDIT:より多くの研究から、WebAPIが機能するにはコンテンツタイプが必要であり、XDomainRequestが送信しないことがわかりました。したがって、私が見る唯一の解決策は、何も設定されていないときにデフォルトのコンテンツタイプを持つようにwebapiを微調整することです。方法はまだわかりませんが、
EDIT2: すべての POST を GET に変換することで一時的にハッキングしましたが、これがどれほどスマートかはわかりませんが、今のところ大きな問題は見られないので、問題を修正するまでは問題ありません