MVC4 Web API アプリケーションへの ajax 呼び出しを行う MVC4 Web アプリケーションのクロスブラウザー、クロスドメイン サポートを実装するソリューションの一部として、IE によるクロスドメイン ajax 呼び出しのサポートを提供するためにXDomainRequestオブジェクトを使用しています < 10 クライアント。
Web API 側で逆シリアル化されると予想される要求本文に JSON を含む POST 操作に問題があります。
XDomainRequest を使用して IE < 10 から呼び出しを行う場合、リクエストのコンテンツ タイプとして明示的に指定することはapplication/json
できません (XDomainRequest を使用する場合はヘッダーを変更できないため)。メソッド シグネチャで指定された型。
クロスドメイン GET 操作はすべてのブラウザーで正常に機能するため、Web API を CORS 用に適切に構成していることに注意してください。
Web API で定義された次の POST 操作を検討してください。
public int Customer(Customer customer) {}
Customer
JSON として表されるオブジェクトがリクエストの本文に存在する場合でも、呼び出しが IE < 10 を使用して XDomainRequest を使用して行われる場合customer
は常にnull
です。これは、XDomainRequest によって生成されたリクエストにcontent-type: application/json
リクエスト ヘッダーがないために発生します。
リクエストでコンテンツ タイプが指定されていない場合でも、JSON 本体を強制的に適切に逆シリアル化できるように、Web API 側でこれを処理する方法はありますか?
モデルバインダーについて読んだことがありますが、これが意図されているかどうかは不明です。
参照用の XDomainRequest コードを次に示します (これは、IE < 10 を除くすべてのブラウザーで jQuery.ajax を使用する関数の一部です)。
var xdr = new XDomainRequest();
if (xdr) {
xdr.open(method, url);
xdr.onload = function() {
var result = $.parseJSON(xdr.responseText);
if (result == null || typeof(result) == 'undefined') {
result = $.parseJSON(data.firstChild.textContent);
}
doneCallback(result);
};
xdr.onerror = function() {
failCallback();
};
xdr.onprogress = function() {
};
xdr.send(data);
}