前言

以前我都是把 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. API网关实践-网易云轻舟微服务

    微服务最佳实践中,我们需要通过统一的 API 网关进行服务能力的共享,API 网关为用户提供发布.管理.保护和监控 API的能力,帮助用户在自己的多个系统之间,或者内部系统与合作伙伴以及第三方的系统之 ...

  2. oeasy教您玩转vim - 44 - # 综合练习

    ​ 综合练习 回忆上节课内容 上次我们学到了各种的替换模式 r,替换当前光标的字符 R,进入替换模式 ~,改变大小写 这次来个综合练习吧! 我们这次要完成这样一个任务 我们有的时候需要写日志 Syst ...

  3. [oeasy]python0007-Guido的简历

    ​ 执行 esc 退回到正常模式 ​ 编辑 esc退出插入模式 准备底行命令模式运行当前py文件 保存执行 ​:w|!python3 %​ 保存并用 python3 解释当前程序(%) ​ 编辑 可以 ...

  4. MViTv2:Facebook出品,进一步优化的多尺度ViT | CVPR 2022

    论文将Multiscale Vision Transformers (MViTv2) 作为图像和视频分类以及对象检测的统一架构进行研究,结合分解的相对位置编码和残差池化连接提出了MViT的改进版本 来 ...

  5. VUE系列---深度解析 Vue 优化策略

    在前端开发中,性能优化一直是一个重要的课题.Vue.js 提供了多种优化策略,帮助开发者构建高性能的应用.本文将深入解析以下几个优化策略: 使用 v-once.v-if 和 v-show 的区别和优化 ...

  6. 浅谈Git架构和如何避免代码覆盖的事故

    浅谈Git架构和如何避免代码覆盖的事故 Git 不同于 SVN 的地方在于, Git 是分布式的版本管理系统, 所有的客户端和服务器都保存了一份代码, 涉及到仓库仓之间的同步, 所以处理不当极易造成冲 ...

  7. 《最新出炉》系列入门篇-Python+Playwright自动化测试-57- 上传文件 - 番外篇

    1.简介 前边的三篇文章基本上对文件上传的知识介绍和讲解的差不多了,今天主要是来分享宏哥在文件上传的实际操作中发现的一个问题:input控件和非input控件的上传API对其都可以上传成功.废话不多说 ...

  8. 制作Linux系统的启动盘

    我不是没有试过软碟通制作启动盘 在写入U盘的选项确认的时候,盘区不支持NTFS!? 另外什么大白菜和老毛桃这样的根本就不支持Linux镜像加载 还是百度的这个靠谱 https://jingyan.ba ...

  9. 【Spring-Security】Re13 Oauth2协议P3 整合JWT

    视频地址: https://www.bilibili.com/video/BV12D4y1U7D8?p=44 有用到Redis存储JWT,头疼每次找Windows版的 https://github.c ...

  10. 【JDBC】Extra04 Mirosoft-Access-JDBC

    MS没提供Jdbc驱动,有一个第三方的UcanAcess驱动包 <!-- https://mvnrepository.com/artifact/net.sf.ucanaccess/ucanacc ...