前言

以前我都是把 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 哦. 很聪明一下

但是!!我更推荐把 [ODataAttributeRouting] 放到 Controller,然后在不需要 OData 的 Action 上添加 [ODataIgnored]。

因为我在做 OData Versioning 的时候中过一个 bug,我只把 [ODataAttributeRouting] 放在 Action 结果它这次不聪明了,必须放到 [ODataAttributeRouting] 才行,具体原因我不清楚,但是我觉得还是不要依赖它的聪明比较好。

OData – Routing的更多相关文章

  1. 在ASP.NET Web API中使用OData

    http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...

  2. 重点关注之OData with List

    OData是什么 官方解释:The Open Data Protocol (OData) is a data access protocol for the web. OData provides a ...

  3. ASP.NET Web API中使用OData

    在ASP.NET Web API中使用OData 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在ASP.NET Web API中,对于CRUD(creat ...

  4. 快速搭建WebAPI(Odata+Code-First)附Odata条件查询表~

    Odata是什么? 开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务的OASIS标准.该标准由微软发起,前三个版本1.0.2.0.3.0都 ...

  5. [转]Support Composite Key in ASP.NET Web API OData

    本文转自:https://code.msdn.microsoft.com/Support-Composite-Key-in-d1d53161 he default EntitySetControlle ...

  6. [转]Web API OData V4 Keys, Composite Keys and Functions Part 11

    本文转自:https://damienbod.com/2014/09/12/web-api-odata-v4-keys-composite-keys-and-functions-part-11/ We ...

  7. [转]ASP.NET web API 2 OData enhancements

    本文转自:https://www.pluralsight.com/blog/tutorials/asp-net-web-api-2-odata-enhancements Along with the ...

  8. [转]Creating an OData v3 Endpoint with Web API 2

    本文转自:https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata- ...

  9. [转]Getting started with ASP.NET Web API OData in 3 simple steps

    本文转自:https://blogs.msdn.microsoft.com/webdev/2013/01/29/getting-started-with-asp-net-web-api-odata-i ...

  10. [转]Using OData from ASP.NET

    本文转自:http://www.drdobbs.com/windows/using-odata-from-aspnet/240168672 By Gastón Hillar, July 01, 201 ...

随机推荐

  1. vue3+elementplus 去除小数点后多余的0公用函数

    vue3+elementplus 去除小数点后多余的0公用函数 export function removeTrailingZeros(value) { // 尝试将值转换为数字 const nume ...

  2. [oeasy]python005_退出游乐场_重启游乐场_系统态shell_应用态_quit

    退出终端_重启游乐场_shell_quit Python 回忆 上次 了解了 python 进入了 python 游乐场   在游乐场 可以做 简单的计算 还可以做 乘方运算   数字特别大之后 游乐 ...

  3. .Net Core MemoryCache 缓存

    缓存是一种开发时常用的性能优化手段,.Net自带内存缓存(MemoryCache)可以很方便的使用,下面列出简单用法. 首先通过NuGet添加 Microsoft.Extensions.Hosting ...

  4. 题解:P7482 不条理狂诗曲

    题解:P7482 不条理狂诗曲 本题解借鉴 blossom_j 大佬思路,但这位大佬的题解似乎没放正确代码. 题意 对于每一个 \(a\) 的子区间 \(a_{l\dots r}\),求选择若干个不连 ...

  5. 服务端渲染中的数据获取:结合 useRequestHeaders 与 useFetch

    title: 服务端渲染中的数据获取:结合 useRequestHeaders 与 useFetch date: 2024/7/24 updated: 2024/7/24 author: cmdrag ...

  6. 【转载】 GPU地址空间的相关概念

    为了结合上篇 文章   https://www.cnblogs.com/devilmaycry812839668/p/13264080.html 对RTX显卡是否能够实现P2P通信功能,同时专业级别显 ...

  7. gpg 密钥的导入、导出

    参考: gpg 密钥生成.导入.导出.自动输入密码 How do I delete secret subkeys correctly? 注意: 本文不对GPG的操作做详细介绍,有深入了解者自行参考:g ...

  8. 为python编译C++模块时一定要注意的事情—————不要在anaconda环境下使用cmake来编译C++扩展模块!!!

    平时搞python的人很多都会有安装C++扩展模块的需求,而往往这些C++模块都是使用CMAKE做编译配置的,但是如果你这时候shell环境是使用anaconda的话,那么cmake默认调用的GCC和 ...

  9. java多线程之-线程池状态

    1.背景 这一节我们来学习一下线程池状态..... 2.线程池状态 状态名称 高3位 是否接受新任务 是否处理队列中的任务 说明 RUNNING 111 是 是 线程池正常运行状态 SHUTDOWN ...

  10. 遥遥领先!鲲鹏ARM架构下国产数据同步能力大幅提升16.9倍

    在上篇文章<2.6倍!WhaleTunnel客户POC实景对弈DataX>发布之后,一个客户突然向我们控诉其苦DataX久矣,因为是在信创的鲲鹏ARM CPU上运行 ,每天同步需要很长时间 ...