Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

ASP.NET WebAPIのOData v4でファンクション定義 その2

$
0
0

次はエンテティに関数を生やします。

まずは、ODataConventionsModelBuilderに関数を指定する。

using System.Web.Http;
using System.Web.OData.Builder;
using System.Web.OData.Extensions; // MapODataServiceRouteに必要using WebApplication5.Controllers;

namespace WebApplication5
{
    publicstaticclass WebApiConfig
    {
        publicstaticvoid Register(HttpConfiguration config)
        {
            var b = new ODataConventionModelBuilder();
            b.EntitySet<Person>("People");
            
            // EntityTypeに関数を生やす
            var addFunction = b.EntityType<Person>()
                .Function("Add");
            addFunction.Returns<double>();
            addFunction.Parameter<double>("x");
            addFunction.Parameter<double>("y");

            config.MapODataServiceRoute(
                "ODataRoute",
                "odata",
                b.GetEdmModel());
        }
    }
}

コントローラーに関数を定義する

普通にメソッドとして定義すればOKです。

[HttpGet]
public IHttpActionResult Add(int key, double x, double y)
{
    return Ok(x + y);
}

keyには、呼び出したときの対象のエンテティのキーが入ります。今回は無視。

呼び出す

T4テンプレートで生成されるクラスからは、以下のようにして呼び出します。

var c = new Container(new Uri("http://localhost:7650/odata"));
var answer = c.People.ByKey(new Dictionary<string, object>
    {
        { "Id", 3 }
    })
    .Add(10, 3)
    .GetValue();
Console.WriteLine(answer);

ByKeyでキー指定して、Addメソッドを呼び出します。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>