前言

以前我都是把 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. DataGridView1列宽根据内容自适应

    DataGridView1列宽根据内容自适应 在使用DataGridView控件时,要使列宽根据内容自适应,你可以使用DataGridView的AutoResizeColumns方法.这个方法允许你根 ...

  2. GitHub Star 数量前 12 的开源无代码工具

    相关文章:GitHub Star 数量前 15 的开源低代码项目 在本篇文章中,我们将探索 12 款在 GitHub 上星级排名前列的开源无代码工具. 每款工具都旨在简化和加速开发过程,但各自侧重于不 ...

  3. ASP.NET Core 3.x 三种【输入验证】方式

    验证要做三件事 定义验证规则 按验证规则进行检查 报告验证的错误. 在把错误报告给API消费者的时候,报告里并不包含到底是服务端还是API消费者引起的错误,这是状态码的工作.而通常响应的Body里面会 ...

  4. 网络基础 登录对接CAS-跨域导致的一个意想不到的Bug

    登录对接CAS-跨域导致的一个意想不到的Bug 背景描述 业务需求是平台登录,接入Cas验证 问题描述 平台登录页,点击登录方式,跳转Cas登录页,提交登录请求,结果发现,又返回平台登录页: 再次点击 ...

  5. 单细胞测序最好的教程(十六):关于RNA速率你想知道的都在这

    作者按 本章节详细讲解了基于RNA速率的三种拟时序模型,包括稳态模型,EM模型和深度学习模型,并对比了不同模型的适用场景与计算特点.本教程首发于单细胞最好的中文教程,未经授权许可,禁止转载. 全文字数 ...

  6. 什么是web3 为什么web3很重要

    中心化网络已经帮助数十亿人融入了互联网,并在其上创建了稳定.可靠的基础设施. 与此同时,少数中心化巨头几乎垄断了互联网,甚至可以为所欲为. Web3 是摆脱这一困境的方案. 不同于科技巨头垄断的传统互 ...

  7. 4、Git之分支操作

    4.1.分支的概述 在版本控制过程中,当需要同时推进多个任务时,可以为每个任务创建的单独分支. 虽然分支的底层实现是指针的引用,但是初学阶段可以将分支简单理解为副本,一个分支就是一个单独的副本. 使用 ...

  8. 【Excel】VBA编程 01 入门

    视频地址: https://www.bilibili.com/video/BV1Q5411p71p 在Excel种需要打开[开发工具]和[启用所有宏]两点 打开开发工具选项 宏启用 菜单栏才会有开发工 ...

  9. 【Windows】远程访问设置

    Windows自带了远程访问功能: Win + R 打开运行,输入[mstsc] 连接需要提供主机地址,和用户账号 下面的选项可以保存此连接为文件,下一次连接直接打开文件即可访问 当然设置了以后可能还 ...

  10. 【JS】03 BOM 浏览器对象模型

    BOM :Broswer Object Model 浏览器对象模型 核心对象是window对象,window对象又可以操作以下的常见对象: - frames[] 窗口对象数组? 浏览器可以打开多个窗口 ...