OData – Routing
前言
以前我都是把 ODataController 和普通 API Controller 分开做. (因为 OData 实在多 Bug, 好东西尽量不要掺和它)
Read 的部分用 OData, CUD 的部分就用原本的 API.
但最近 OData 弃用了 ODataRoute 这些东西, 改用 Web API 的 Route, HttpGet 等.
视乎它有心把大家统一起来, 所以我去了解了一下.
主要参考
Routing in ASP.NET Core OData 8.0 Preview
Attribute Routing in ASP.NET Core OData 8.0 RC
By Default
在没有设置 Attribute 的情况下. 当我们定义一个 Entity 以后. 它就有了它的路径
builder.EntitySet<Product>("Products");
比如
GET products
GET products/$count
GET products/{key}
GET products({key})
这个叫 template, 一般上我们是不会去修改它的. 改了就不像 restful 了嘛.
Controller 要对上这些路径, 就要有一套标准写法
有一点点写不对就匹配不上了
Attribute route
Web API 的 attribute route 可以让我们任意 match url 然后带去 action.
OData attribute route 只是取代了上面那种通过 Controller 命名去 match 的方式.
它并不能任意写 url 哦, 你还是得按照 OData 规定得 restful template 去写匹配
在使用 attribute route 之后, controller, action, parameter 的命名就可以任意了.
但要记得哦, 它不能任意写 path, 一定要写 odata restful template 定义好的, 除非你自己去 override route conversion.
和 WebAPI share 同一个 Controller
我不知道这个是不是一个好的 way 啦. 但至少分开 Controller 对 swagger 会是一个问题啦 (它是以 Controller 分 group 的)
首先不要继承 ODataController
它里面其实也只是有 created 和 updated 的东西而已, 而我刚好只用它做 query. perfect !
没有 ODataController 以后 attribute route 就不 working 了
需要另外加上 [ODataAttributeRouting]
[ODataAttributeRouting] public class HandleCustomerController : Controller { … }
或者
[ODataAttributeRouting] [HttpGet("odata/Orders/{key}")] public IActionResult Get(int key) { return Ok($"Orders{key} from OData"); }
如果只是 action 有, controller 没有, 但是它也会去 parent 拿到 api 哦. 很聪明一下
相关文章
- ASP.NET Core OData now Available
- OData – Get Started 搭建单侧环境
- OData – OData vs GraphQL
- OData – Query to Expression
- OData – How It Work
- OData – 权限管理
- OData – Custom Serialize & Deserialize
- OData – API Versioning
- Asp.net core Identity + identity server + angular + odata + 权限管理
- Asp.net core 学习笔记 ( OData )
- ASP.NET 4.x Web Api Odata v4 backend modify query 修改查询
- Entity Framework OData filter inherit
- web api 2 学习笔记 (Odata ODataQueryOptions 使用)
- web api 2 学习笔记 (Odata basic)
- web api 2 学习笔记 (OData Batch request)
- web api 2 学习笔记 (OData RPC)
- Web API 2 学习笔记 - odata
- Dynamics CRM2013 Odata的filter中含有日期字段时遇到的一个奇葩问题
- Dynamics CRM 通过Odata创建及更新记录各类型字段的赋值方式
- Dynamics CRM2015 2015版本可用的OData Query Designer工具
- Dynamics CRM OData 查询超过50条记录的数据(Retrieving More than 50 records using OData)
- Dynamics CRM OData方式进行增删改查时报错的问题
- Dynamics CRM 通过OData查询数据URI中包含中文的情况
- Dynamics CRM Odata QueryUrl中的SetName问题