1

私のWebApiプロジェクトには、データソースからデータを返すGetメソッドがあります。

    [WebGet(UriTemplate = "")]
    public IQueryable<Product> Get()
    {
        var products = _db.Products;
        return products.AsQueryable();
    }

これをテストクライアントを使用してブラウザーで表示すると、JSONとして返すように指定すると正常に機能し、JSONが返されます。

他のクライアントでは、APIが同じドメインでホストされているためJSONPを作成する必要があります(開発のみ)が、JSONリクエストから返されるデータはXMLですが、JSONとして返すにはどうすればよいですか?以下は、リクエストを行うための私のコードです。

    $.ajax({
        crossDomain: true,
        dataType: "jsonp",
        url: "http://localhost:9000/api/products",
        contentType: 'application/json; charset=utf-8',
        type: "get",
        success: function (data) {

            console.log(data);
        }
    });
4

1 に答える 1

2

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

あなたの主な問題は、デフォルトでwebapiにJSONPメディアフォーマッターが登録されていないことです。あなたが望むことを達成するには、3つのことが必要です。

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

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

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

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

通常、これはApplication_Start()で行いglobal.asaxます。

クエリはJSONPを正常に要求しているように見えます。上記が完了すると、機能するはずです。重要な部分は、accept送信されるヘッダーが、光沢のある新しいjsonpフォーマッターがリッスンしているacceptヘッダーと一致することです。私の意見の上位2つの選択肢は、application/javascript(要求しているように)またはtext/javascript

于 2012-05-21T21:23:38.193 に答える