Asp.net core 学习笔记 ( OData )

和 asp.net odata 区别不大. 用法依旧. 

定义 EdmModel 

public static class ODataConfig
{
    public static IEdmModel GetEdmModel(IServiceProvider servicePrivider)
    {
        var builder = new ODataConventionModelBuilder(servicePrivider);

        /* 
            对应 route :
            GET : /odata/products
            GET : /odata/products(key)
            POST : /odata/products 
            PUT : /odata/products(key)
            DELETE : /odata/products(key)
        */
        builder.EntitySet<Product>("Products");

        // POST /odata/products/changeSort
        var productChangeSort = builder.EntityType<Product>().Collection.Action("changeSort");            
        productChangeSort.Returns<string>();

        // POST /odata/products(key)/doSomething
        var sample1 = builder.EntityType<Product>().Action("doSomething");
        sample1.Returns<string>();

          // GET /odata/products/getSomething
          var sample2 = builder.EntityType<Product>().Collection.Function("getSomething");
          sample2.ReturnsCollectionFromEntitySet<Product>("Products");

return builder.GetEdmModel();
    }
}

普通的 get,post,put,delete 和 RPC get 和 post 

然后在 UseMvc 添加上 routing

app.UseMvc(builder =>
{
    builder.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");

    builder.Select().Expand().Filter().OrderBy().MaxTop(null).Count();
    builder.MapODataServiceRoute("odata", "odata", ODataConfig.GetEdmModel(app.ApplicationServices));
});

odata 有 default routing 匹配的概念,就好像第一个 code 图的 path 就是 default 的对应. 

因为使用的是 default routing 所以不需要添加 [ODataRoute] 标签, 同时也无法使用 [ApiController], 因为 apicontroller 依赖 route 标签...

所以我们必须使用 [FromQuery] [FromBody] binding data. 

builder.EntitySet<Product>("Products"); 里头的 "Products" 对应了 "ProductsController" 

get,put,post,delete 是通过方法名字的前面几个字来匹配的. 

builder.EntityType<Product>().Collection.Action("changeSort") 的 "changeSort" 对应的是 "changeSort" 方法名 

如果你使用 ODataRoute 的话,那么就不看方法名字,转而看 ODataRoute 来对应. 

猜你喜欢

转载自www.cnblogs.com/keatkeat/p/9297826.html