かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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

次はコレクションに関数を生やします。

引数つけると何故か成功しなかったので引数無しで…。

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

namespace WebApplication5
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            var b = new ODataConventionModelBuilder();
            b.EntitySet<Person>("People");
            
            // EntityTypeのCollectionに関数を生やす
            var addFunction = b.EntityType<Person>()
                .Collection
                .Function("Add");
            addFunction.Returns<double>();

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

メソッドもコントローラに普通に定義

[HttpGet]
public IHttpActionResult Add()
{
    return Ok(13.0);
}

呼び出し側は、Peopleに直接メソッドが生えてる。

var c = new Container(new Uri("http://localhost:7650/odata"));
var answer = c.People
    .Add()
    .GetValue();
Console.WriteLine(answer);