4

重複の可能性:
MVC 4 WebApi を使用した JSONP

次のような WebAPI の get メソッドがあります。

    private T Get<T>(string uri)
    {
        T result = default(T);
        bool isSuccess = true;

        client
            .GetAsync(uri)
            .ContinueWith(task =>
            {
                // EnsureStatus
                isSuccess = task.Result.IsSuccessStatusCode;
                task
                .Result
                .Content
                .ReadAsAsync<T>()
                .ContinueWith(t => result = t.Result)
                .Wait();
            })
            .Wait();
       return result;
     }

結果は JSON 形式で生成されますが、JSONP で使用したいです。

ReadAsSync組み込みのメディアフォーマッターのみを処理することを読みました。JsonPを処理するように変更する方法はありますか?

4

1 に答える 1

4

この複製から惜しみなく盗む… 。

あなたが望むことを達成するためにあなたは3つのことを必要とします:

  1. media formatterJSONPを出力するを追加するには
  2. メディアフォーマッターを登録する(従来はglobal.asxを介して行われていた)
  3. クライアントがjsonPを要求していることを確認します。

このJSONPメディアフォーマッターを盗むことができます。

次に、メディアフォーマッタを登録する必要があります。これは、次のコードスニペットを使用してプログラムで実行できます。

var config = GlobalConfiguration.Configuration;
config.Formatters.Insert(0, new JsonpMediaTypeFormatter());

どうやらglobal.asaxを使用していないので、フォーマッターが何らかの方法で登録されていることを確認する必要があります。あなたはそれを行う方法について十分な情報を提供していませんが、賢明に配置されたIFステートメントと登録を示す静的変数があなたをそこに導くだろうと私は思います。

使用しているクライアントのタイプはまだよくわかりませんが、jqueryの場合は、次のようなものが表示されます。

$.ajax({
    url: 'http://myurl.com',
    type: 'GET',
    dataType: 'jsonp',
    success: function (data) {
        alert(data.MyProperty);
    }
})

重要な部分は、accept送信されるヘッダーが、光沢のある新しいjsonpフォーマッターがリッスンしているacceptヘッダーと一致することです。私の意見では、上位2つの選択肢は次のいずれかです。application/javascriptまたはtext/javascript

于 2012-05-09T14:10:03.483 に答える