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 哦. 很聪明一下

但是!!我更推荐把 [ODataAttributeRouting] 放到 Controller,然后在不需要 OData 的 Action 上添加 [ODataIgnored]。
因为我在做 OData Versioning 的时候中过一个 bug,我只把 [ODataAttributeRouting] 放在 Action 结果它这次不聪明了,必须放到 [ODataAttributeRouting] 才行,具体原因我不清楚,但是我觉得还是不要依赖它的聪明比较好。
OData – Routing的更多相关文章
- 在ASP.NET Web API中使用OData
		
http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...
 - 重点关注之OData with List
		
OData是什么 官方解释:The Open Data Protocol (OData) is a data access protocol for the web. OData provides a ...
 - ASP.NET Web API中使用OData
		
在ASP.NET Web API中使用OData 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在ASP.NET Web API中,对于CRUD(creat ...
 - 快速搭建WebAPI(Odata+Code-First)附Odata条件查询表~
		
Odata是什么? 开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务的OASIS标准.该标准由微软发起,前三个版本1.0.2.0.3.0都 ...
 - [转]Support Composite Key in ASP.NET Web API OData
		
本文转自:https://code.msdn.microsoft.com/Support-Composite-Key-in-d1d53161 he default EntitySetControlle ...
 - [转]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 ...
 - [转]ASP.NET web API 2 OData enhancements
		
本文转自:https://www.pluralsight.com/blog/tutorials/asp-net-web-api-2-odata-enhancements Along with the ...
 - [转]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- ...
 - [转]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 ...
 - [转]Using OData from ASP.NET
		
本文转自:http://www.drdobbs.com/windows/using-odata-from-aspnet/240168672 By Gastón Hillar, July 01, 201 ...
 
随机推荐
- 为什么学编程都从helloworld开始?
			
你好世界 回忆上次内容 上次 了解了 游乐场规则 REPL 添加图片注释,不超过 140 字(可选) print函数 可以输出 字符串"h" 添加图片注释, ...
 - 题解:AT_abc352_d [ABC352D] Permutation Subsequence
			
虽然比赛没打,但是想来水估值发表思路. 题意 给你一个 \(1\sim n\) 的排列,让你从中找一段长为 \(k\) 的子序列,使得这个子序列中的元素排序后数值连续. 分析 题意转换一下,先用结构体 ...
 - 题解:AT_arc173_b [ARC173B] Make Many Triangles
			
背景 前几天打了比赛,崩麻了,所以来水一篇题解.LC真睿智 题意 给你 \(n\) 个点,问最多能组成几个三角形. 分析 听说可以随机化.这道题就是一个简单贪心. 我们考虑,如果没有共线的点,那么答案 ...
 - JAVA私有构造函数---java笔记
			
在Java中,构造函数是一种特殊的方法,它用于初始化新创建的对象.当我们创建一个类的实例时,构造函数会自动被调用. 构造函数可以有不同的访问修饰符,如public.protected.default( ...
 - UE-自带的HotUpdate【转】
			
原文链接:https://baijiahao.baidu.com/s?id=1745200406976270792&wfr=spider&for=pc 这是百度可以直接搜索到的 UE4 ...
 - 使用 useRequestURL 组合函数访问请求URL
			
title: 使用 useRequestURL 组合函数访问请求URL date: 2024/7/26 updated: 2024/7/26 author: cmdragon excerpt: 摘要: ...
 - 【CI/CD】Centos7 下载安装 Jenkins
			
一.Docker安装Jenkins 参考: https://www.bilibili.com/video/BV11B4y1W7eH?p=5 安装Jenkins最新稳定版镜像: [root@Centos ...
 - 【Vue】Re01 理论概念和入门上手
			
一.Vue概述 什么是渐进式?1.把Vue作应用的一部分嵌套项目中2.如果完全抛弃其他组件和框架,Vue又具有丰富的生态和库莱支持3.Core + Router + VueX 满足项目绝大多数的需求- ...
 - 实现一个终端文本编辑器来学习golang语言:第二章Raw模式下的输入输出
			
从第二章开始,在每个小节的最后都会有一些代码实操作业,你可以选择自己完成(比较推荐),再对照我的实现方式,当然也可以直接看我的代码实现.不过,之后的各个功能实现,我都会基于我先前的代码实现版本,在它的 ...
 - 位段 -- 内存布局详解C语言
			
目录 位段的介绍 位段使用示例: 位段的内存分配 Example 内存分配解析: ## 位段 位段的介绍 位段(二进制位):就是按位存储 位段(bit-field)是C语言中的一种特殊数据类型,它允许 ...