使用 ASP.NET Core 5 Web API 创建可发现的 HTTP API
使用 ASP.NET Core 5 Web API 创建可发现的 HTTP API
https://devblogs.microsoft.com/aspnet/creating-discoverable-http-apis-with-asp-net-core-5-web-api/
这个月,我们将关注使用 .NET 5 创建 HTTP API。我们将探索各种不同的工具、技术和服务来使你的 API 开发体验更为愉快。每一周,我们将在本博客发布一篇关于使用 .NET 构建 HTTP API 不同领域的文章,主要关注于使用 ASP.NET Core 5 Web API 和 OpenAPI 标准两者来构建、发布、消费和重用良好说明的 Web。下面是寄到到来的一个系列。
- Creating Discoverable HTTP APIs with ASP.NET Core 5 Web API (this post)
- Open-source HTTP API packages and Tools
- Generating HTTP API clients using Visual Studio Connected Services
- App Building with Azure API Management, Power Apps, and Logic Apps
考虑设计优先
如果你曾经在 Visual Studio 中右键 Add Web Reference 来添加一个 SOAP Web 服务,或者,当 WCF 出现的时候,使用 Add Service Reference 来添加它,您就会知道这些工具及其对标准描述格式的支持(Web 服务定义语言 (WSDL) 为您的开发体验带来的快乐。
OpanAPI 规范
定义良好的 API 对于开发、维护和使用它是友好的。在开发过程中,使用这些包来描述你的 API, 通过遵循一些简单的约定,你的 API 将更加可发现、与其它产品和云服务集成的集成会更加容易,通常来说,提供更多的使用场景。
示例项目
本文使用一个简单的 Visual Studio 解决方案。在该解决方案中,你将发现一个简单的用于 Contoso 在线订单的 Web API 工程。随着进行,
https://github.com/bradygaster/Contoso.Online.Orders?WT.mc_id=dotnet-13135-bradyg
ProducesAttribute
设定 API 输出的类型
对应的,ConsumesAttribute 用来指定请求 API 的内容类型。
[Produces("application/json")]
[Consumes("application/json")]
还可以使用 MediaTypeName 来更加简单的使用众所周知的媒体类型值。
可以在 Controller 级别为所有的请求和响应设置为 JSON 类型。
[Route("[controller]")]
[ApiController]
#if ProducesConsumes
[Produces(MediaTypeNames.Application.Json)]
[Consumes(MediaTypeNames.Application.Json)]
#endif
public class AdminController : ControllerBase
{
// controller code
}

HTTP Response Codes
如果成功,返回 200 OK,和实际的产品。
否则,会返回 404
[HttpGet("/products/{id}")]
public async Task<ActionResult<Product>> GetProduct(int id)
{
var product = StoreServices.GetProduct(id);
if(product == null)
{
return NotFound();
}
else
{
return Ok(product);
}
}
但是,OpenAPI 的 JSON 对于该方法仅仅提供了 200 响应码,默认的 GET 行为。
Web API 约定
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
#if ApiConventions
[assembly: ApiConventionType(typeof(DefaultApiConventions))]
#endif
namespace ContosoOnlineOrders.Api
{
public class Program
{
支持 OpenAPI operationId
用来区分每个操作的标识
使用 ASP.NET Core 5 Web API 创建可发现的 HTTP API的更多相关文章
- angular4和asp.net core 2 web api
angular4和asp.net core 2 web api 这是一篇学习笔记. angular 5 正式版都快出了, 不过主要是性能升级. 我认为angular 4还是很适合企业的, 就像.net ...
- ASP.NET Core 2 学习笔记(十二)REST-Like API
Restful几乎已算是API设计的标准,通过HTTP Method区分新增(Create).查询(Read).修改(Update)和删除(Delete),简称CRUD四种数据存取方式,简约又直接的风 ...
- ASP.NET Core on K8S学习初探(3)部署API到K8S
在上一篇<基本概念快速一览>中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程. Section ...
- 在ASP.NET Core 2.2 中创建 Web API并结合Swagger
一.创建 ASP.NET Core WebApi项目 二.添加 三. ----------------------------------------------------------- 一.创建项 ...
- 使用angular4和asp.net core 2 web api做个练习项目(一)
这是一篇学习笔记. angular 5 正式版都快出了, 不过主要是性能升级. 我认为angular 4还是很适合企业的, 就像.net一样. 我用的是windows 10 安装工具: git for ...
- 使用angular4和asp.net core 2 web api做个练习项目(四)
第一部分: http://www.cnblogs.com/cgzl/p/7755801.html 第二部分: http://www.cnblogs.com/cgzl/p/7763397.html 第三 ...
- ASP.NET Core Restful Web API 相关资源索引
GraphQL 使用ASP.NET Core开发GraphQL服务器 -- 预备知识(上) 使用ASP.NET Core开发GraphQL服务器 -- 预备知识(下) [视频] 使用ASP.NET C ...
- ASP.NET Core 3.1 WebApi+JWT+Swagger+EntityFrameworkCore构建REST API
一.准备 使用vs2019新建ASP.NET Core Web应用程序,选用api模板: 安装相关的NuGet包: 二.编码 首先编写数据库模型: 用户表 User.cs: public class ...
- (17)ASP.NET Core EF基于数据模型创建数据库
1.简介 使用Entity Framework Core构建执行基本数据访问的ASP.NET Core MVC应用程序.使用迁移(Migrations)基于数据模型创建数据库,你可以在Windows上 ...
- (18)ASP.NET Core 基于现有数据库创建EF模型(反向工程)
1.简介 Entity Framework Core可通过数据库提供给应用程序的插件访问许多不同的数据库.我们可以通过使用Entity Framework Core构建执行基本数据访问的ASP.NET ...
随机推荐
- QQ或者微信可以放昵称的超好看的符号
☪︎⋆ ✯ ⛈ •ᴗ• •ᴥ• ◔.̮◔ ᕱ ᕱ ⸝⸝· ᴥ ·⸝⸝ ʕ·͡ˑ·ཻʔ ʕ•̫͡•ོʔ ˃̣̣̥᷄⌓˂̣̣̥᷅ °꒰'ꀾ'꒱° ⋆ᶿ̵᷄ ˒̼ ᶿ̵᷅⋆ ˙ϖ˙ ⚝ ︎ .˗ˏˋ♡ˎˊ˗ ...
- 数据库故障处理优质文章汇总(含Oracle、MySQL、MogDB等)
数据库告警.紧急问题处理这些项目对于大多数朋友来讲应该不陌生了.从墨天轮社区整理的"最受DBA欢迎的技术文档合辑"系列中可以发现,大家对"故障诊断专题"的热情居 ...
- vue3中的vue-18n的table表格标题不动态变化中英文
使用 computed 即可 eg: const columns = computed(() => { return reactive<any>([ { title: proxy.$ ...
- 在Java程序中监听mysql的binlog
目录 1.背景 2.mysql-binlog-connector-java简介 3.准备工作 1.验证数据库是否开启binlog 2.开启数据库的binlog 3.创建具有REPLICATION SL ...
- python+ffmpeg视频转码转格式
本文转发来自:https://blog.csdn.net/KH_FC/article/details/115771126 废话 python目前自己也是在学习当中,对python也不是特别精通,写视频 ...
- 5道大厂的JAVA经典面试题
前言 本来想着给自己放松一下,刷刷博客,慕然回首,Java的四种引用,强弱软虚?泛型常用特点?Java创建对象有几种方式? 有没有可能两个不相等的对象有相同的hashcode?深拷贝和浅拷贝的区别是什 ...
- NOIP2024模拟赛13:拆开未来
NOIP2024模拟赛13:拆开未来 写在前面:进制哈希的P不要用998244353会被卡!用131.注意取模为负数的情况! C-重复 一句话题意:给定字符串 \(S\), 问 \(S\) 的所有子串 ...
- SyncOOD:增加OOD目标检测鲁棒性,自动化数据助您一臂之力 | ECCV'24
本文是对公开论文的核心提炼,而非直接翻译,旨在进行学术交流.如有任何侵权问题,请及时联系号主以便删除. 来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Can OOD Object Dete ...
- 循环中拼接String不同方法性能耗时对比
对比背景 Java中最常用的拼接字符串方法就是 + 或 +=,使用上简单方便.但如果拼接数量比较大,例如在循环中拼接字符串,可能会有性能问题: 测试数据 循环100000次进行String拼接,对比+ ...
- 【一步步开发AI运动小程序】二十、AI运动小程序如何适配相机全屏模式?
引言 受小程序camera组件预览和抽帧图像不一致的特性影响,一直未全功能支持全屏模式,详见本系列文件第四节小程序如何抽帧:随着插件在云上赛事.健身锻炼.AI体测.AR互动场景的深入应用,各开发者迫切 ...