9

新しいWebAPIベータを使用して、 ODataクエリ文字列規則を使用してクエリできるWebサービスを構築し、OData形式のJsonを返すようにしています。また、(1.0ではなく)OData2.0を使用したいと思います。

$ selectオプションをサポートしているようには見えず、ヘッダーは$ formatオプションをオーバーライドできるようですが、ジェネリックを返すと、IQueryable必要な他のほとんどのクエリオプションがサポートされるようです。

私が本当に苦労しているのは、OData2.0仕様を満たすJsonオブジェクトを提供するための最善の方法です。WebAPIは、クエリ時に通常のJsonデータを返すだけです。たとえば、次のようなGETリクエストを実行すると...

http://localhost:XXXXX/vendor/?$filter=RONUMBER eq '2597385'&$select=VENDORID,VENDORNAME&$top=1&$format=Json

..開発マシンで指定されたRONumberに一致するトップヒットを取得するために、次のJsonを含む応答を取得します。

[{"MEPartNumber":"11-2222-3-4444","MFGPartNumber":"123456-123","MFGSerialNumber":"ABC123","RONumber":"987654321","VendorId":"1234567","VendorName":"ACME SERVICE CENTER"}]

OData2.0仕様を満たすJsonが必要です。このようなもの..

OData V2: { 
  "d" : { 
    "results":  { 
        "__metadata": {
            "uri": "http://someserver/foo/vendor(1)",
            "type": "Vendor"
        },
        "MEPartNumber": "11-2222-3-4444",
        "MFGPartNumber": "123456-123",
        "MFGSerialNumber": "ABC123", 
        "RONumber":"987654321", 
        "VendorId":"1234567", 
        "VendorName": "ACME SERVICE CENTER"
    }
  }
}

MediaTypeFormatter必要な構造を取得するためのカスタムを作成できると思います。また、返されたオブジェクトを変更して、目的のJsonの構造を模倣できる場合もあります。これらの2つのオプションとは別に、WebAPIにOData 2.0形式のJsonオブジェクトを提供させる賢い方法を知っている人はいますか?

4

1 に答える 1

5

MediaTypeFormatter適切なシリアル化を提供するには、独自に作成する必要があります。MVC 4ベータ版ではODataフォーマッターを出荷していませんが、以前のWCF Web Apiの化身には、ODataフォーマッターの作成方法の例がいくつかあります。http://wcf.codeplex.com/SourceControl/list/changesets Microsoft.Net.Http.Formatting.ODataを探します(一部の実装の詳細は変更されている可能性がありますが、ほとんどのソースを使用できるはずです)

別の方法は、ODatav2で期待される形状にシリアル化するDTOを構築しようとすることです。

于 2012-02-22T20:20:25.677 に答える