かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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);