VS2012 で ASP.Net WebAPI プレリリース ビットを使用してサーバーを作成しています (現時点では役に立たないと思いますが、VS2013 を使用できてうれしいです)。その中には、エンティティを公開する一連の OData コントローラーがあります。CodePlex で入手できる ASP.Net サンプルの ODataActionsSample のように、これらのエンティティにいくつかの OData アクションを設定しようとしています。
私の最初のクライアントは C# ベースの WPF アプリです。WCF Data Services を介したクエリは問題ありません。
私ができるようにしたいのは、OData メタデータに表示されるアクションを呼び出して、その結果を解析することです。
ネイティブ アクションの呼び出しは WCF Data Services Client では利用できないようです。そのため、HttpClient を使用して自分で実行する必要があります。そうですか?もしそうなら、私はすでにその道を進んでいます。URL をハードコードするのではなく、エンティティでアクションを呼び出したい場合は、(その ODataActionSample から) など、そのエンティティをフェッチする LINQ クエリを作成するだけです。
Movies.Where(m=>m.Id == 1)
それを呼び出す代わりに、.ToString() を実行して、呼び出される URL を取得します。次に、その URL を操作して、パラメーターやアクションを追加します。
これが機能すると仮定すると、JSON が返されます。ODataActionSample の場合、URL http://localhost.fiddler:8708/odata/Movies(3)/CheckOutに POST してムービーをチェックアウトできます。
それは次のようなJSONを返します
{
"odata.metadata":"http://localhost:8708/odata/%24metadata#Movies/@Element","#CheckOut":{
},"ID":3,"Title":"Fatal Vengeance 2","Year":2012,"DueDate":"2013-07-24T16:33:14.0699789+10:00"
}
これを、WCF Data Services が既に作成した型付きの Movie オブジェクトに戻すにはどうすればよいですか? 私はそれが可能だと感じており、LinqPad の DataContractJsonSerializer クラスで少し遊んでいますが、これまでのところあまり成功していません。
また、クライアント側のエンティティ コードを拡張する部分クラスのメソッドとして、これらのアクション コールの一部をタイプ セーフな方法でスキャフォールディングするために、T4 テンプレートなどでできることはありますか?