このOData V4 チュートリアルに従っていますが、バインドされた関数に問題がありますMostExpensive
。
この関数はProducts
コレクションにバインドWebApiConfig.Register()
され、チュートリアルで提案されているように登録されます。
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.Namespace = "ProductService";
builder.EntityType<Product>().Collection.Function("MostExpensive").Returns<decimal>();
このチュートリアルのパート 2 では、このサービスの基本的なクライアントについてのみ説明しています。そのため、チュートリアルの後半で説明する関数も呼び出せるように拡張したいと考えています。
OData Client Code Generator
チュートリアルで提案されているように、クライアントを作成しました。次に、いくつかの製品とサプライヤーを追加し、最も高価な製品を取得したいと考えています。
static void Main(string[] args)
{
const string serviceUri = "http://localhost:52542";
Container container = new Container(new Uri(serviceUri));
AddProducts(container, GenerateSomeProducts());
AddSuppliers(container, GenerateSomeSuppliers());
Console.WriteLine("Most expensive product is: {0}", container.Products.MostExpensive().GetValue());
...
}
呼び出すと、型を参照してGetValue()
いるというInvalidOperationException
状態が返されますが、型が必要です。http://localhost:52542/$metadata
Edm.Decimal
Collection(Edm-Decimal)
http://localhost:52542/Products/ProductService.MostExpensive()
ブラウザで直接呼び出すと、
{
"@odata.context":"http://localhost:52542/$metadata#Edm.Decimal","value":40000.95
}
どちらが正しいようです。
私は何か悪いことをしていますか?これを修正する方法がわかりません。それで、それについて何か提案はありますか?