1

Azure SDK 2012年10月を使用しています。.NET用のストレージクライアントライブラリのODataLib依存関係は、ODataLib(バージョン5.0.2)によって解決されます。Azureテーブルでクエリを実行すると、次の例外が発生します。

A supported MIME type could not be found that matches the content type 
    of the response. None of the supported type(s) 'application/atom+xml;type=feed,
    application/atom+xml, application/json;odata=verbose' matches the content type
   'text/xml;charset=utf-8'.

Fidlerを使用してHTTPのヘッダー値を追跡したとき、

リクエストの場合は

Accept: application/atom+xml,application/xml

応答のためにそれはでした

Content-Type: text/xml;charset=utf-8

私の組織の代理人のせいでそれが起こっていると確信しています。(bcsの同じコードはプロキシがなくても正常に機能します)。だから誰かがこの問題を解決する方法を私に助けることができますか?

1)クエリの実行中にContent-Typeを設定する方法はありますか?

2)または、ODataLibはContent-Typeを処理しません:text / xml; charset = utf-8?

4

3 に答える 3

2

ODataLibは、Content-Typeヘッダーを使用して、応答を解析する形式を決定します。「text/xml」MIMEタイプは、ODataごとの有効なコンテンツタイプではないため、エラーが発生します。

「application/xml」を「text/xml」に変換するプロキシがある場合は、ODataLibに渡される前に、あるレイヤーでそれを元に戻す必要があります。.Net用のストレージクライアントライブラリの経験がないため、ペイロードがODataLibによって解析される前に、応答ヘッダーの変更をどのレベルで制御できるかわかりませんが、応答のコンテンツをオーバーライドできるかどうか-ヘッダーを直接入力すると、「text/xml」を「application/xml」(または「application / atom + xml」)に戻すことができます。

ODataLibを直接使用している場合(またはその上で使用しているライブラリがIODataResponseMessage実装を公開している場合)、IODataResponseMessage.GetHeader()の実装を変更して、返そうとするときにいつでも「application/xml」を返すことができます。メソッドへの入力が「Content-Type」の場合は「text/xml」。

また、最初の質問に答えるために、リクエスト時にコンテンツタイプを設定する方法は、Acceptヘッダーを使用することです。これは、あなたの場合はすでに正しいです。

于 2012-12-11T22:02:17.277 に答える
1

この問題は次のように解決しました。

Fidlerの[ Rules ]メニューの[ CostomizeRules ]オプションを使用して、 [ CustomRules.js ]ファイルを開きます。「 OnBeforeResponse 」という関数があります。この関数内に以下のコードを追加して、データがアプリケーション(API)に渡される前に応答Content-Typeを変更します。

if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "text/xml")){
    // Remove the content-type header (text/xml)
    oSession.oResponse.headers.Remove("Content-Type");

    // Replace Content-Type with the new type
    oSession.oResponse["Content-Type"] = "application/atom+xml";        

}
于 2012-12-12T09:00:46.723 に答える
0

提案されたソリューションは機能する可能性がありますが、より簡単なソリューションは、HTTPSを使用して、プロキシがヘッダーを置き換えないようにすることです。要件が引き続きHTTPを使用する場合は、ストレージクライアントコードを変更して、ODataライブラリによって解析される前にこのヘッダーを手動で置き換えることができます(HttpResponseAdapterMessage.cs GetHeader関数を参照)。

ジョー

于 2012-12-18T17:56:00.317 に答える