网站首页 > 教程分享 正文
如题,今天为大家分享一种基于ASP.NET Core 3.x的端点路由(Endpoint Routing)实现控制器(Controller)和操作(Action)分离的接口服务方案。
为什么写这篇文章?为什么控制器(Controller)和操作(Action)分离?这来源由Github上的一个开源ASP.NET Core项目—Ardalis.ApiEndpoints,其中的Readme中描述了为什么要控制器和操作分离,为什么有ApiEndpoints这个项目的出现,引用并总结如下:
常规的MVC模式本质上是一种反模式,这种模式集合了许多但从不相互调用的方法,并且很少在相同的状态下操作。随着项目的发展,一个控制器会变得越来越臃肿,甚至可能无法控制。当你需要创建一个不同类型的接口服务的时候,还得首先创建相应的控制器,无法做到业务逻辑分开处理等等问题。
其实,在常规的MVC或者Web API应用程序中,许多开发者也许已经意识到了这种问题的存在,但仍然没有更好的办法来组织,拆分和管理这些控制器和操作,所以就出现了Ardalis.ApiEndpoints这个项目。
Ardalis.ApiEndpoints简介
如上所述,Ardalis.ApiEndpoints是为了解决分离控制器(Controller)类和操作(Action)服务的解决方案。有了它,你可以按照不同的业务来分开组织并管理服务接口端点,甚至可以为不同服务创建独立的文件夹,就像ASP.NET Razor Pages的项目结构类似,而不同把所有服务放到一个控制器中。下面我们就使用Ardalis.ApiEndpoints来创建一个示例。
Ardalis.ApiEndpoints示例
1.首先,我们创建一个ASP.NET Core 3.x 的Web项目,命名为:EndpointDemo,然后使用Nuget安装Ardalis.ApiEndpoints
2.创建一个路径为[Endpoints/v1/Student/]的文件目录,在此目录中创建一个继承至BaseEndpoint<TRequest, TResponse>的类GetById.cs,其中的TRequest表示接口的请求参数实体类,TResponse表示接口的返回实体类。
3.在GetById.cs类中实现抽象类中的Handle()方法。
4.标记Handle()方法的HTTP请求类型,如:HttpGet,HttpPost…
5.定义返回实体类TResponse,示例中的类名为StudentResponse.cs
代码如下:
为支持作者的劳动成果,此内容需要 登录 后才能浏览
StudentResponse.cs
为支持作者的劳动成果,此内容需要 登录 后才能浏览
以上就完成了一个基于ASP.NET Core 3.x的端点服务接口,这里我们并没有创建任何控制器,请求地址为:
http://localhost:12345/api/v1/student/{id:int}
Startup.cs文件中需要注册控制器的服务,如:
services.AddControllers();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
以下我们来集成Swagger接口文档,还是使用Nuget安装
Swashbuckle.AspNetCore.Annotations,然后在Startup.cs文件中配置Swagger(同时配置了Swagger的权限访问),如下:
为支持作者的劳动成果,此内容需要 登录 后才能浏览
修改appsettings.json文件,如下:
为支持作者的劳动成果,此内容需要 登录 后才能浏览
接下来,我们使用SwaggerOperation来丰富接口文档的注释,修改GetById.cs文件如下:
为支持作者的劳动成果,此内容需要 登录 后才能浏览
同时,我还创建了一个Create.cs文件,用来演示[HttpPost]请求,如下:
为支持作者的劳动成果,此内容需要 登录 后才能浏览
NewStudentRequest.cs
为支持作者的劳动成果,此内容需要 登录 后才能浏览
创建用于用户授权的目录v1/Auth,并创建获取令牌的类GrantToken.cs,代码如下:
为支持作者的劳动成果,此内容需要 登录 后才能浏览
运行项目,打开地址:
http://localhost:56369/swagger 如果运行成功,你将看到如下界面:
这时,如果你直接点击【获取指定ID的学生信息】,接口返回的是401错误,如图:
因为我们还未对接口访问进行授权,那么我们需要先请求授权接口:/api/v1/auth/grant_token,以获取用户令牌,如下:
将获取到的令牌填入授权窗口中,如下:
最后,再请求【获取指定ID的学生信息】,得到正确的接口返回内容,如下:
项目结构如下:
本文为你分享的Ardalis.ApiEndpoints内容就到这里,使用Ardalis.ApiEndpoints,你可在不用创建控制器的场景下任意地组织和管理你的接口服务端点。感谢你的阅读!
猜你喜欢
- 2025-05-02 微软宣布开源.NET框架 支持Linux与Mac OS X
- 2025-05-02 一个基于.Net Core遵循Clean Architecture原则开源架构
- 2025-05-02 一个基于ASP.NET Core完全开源的CMS 解决方案
- 2025-05-02 盘点16个.Net开源项目(.net开源吗)
- 2025-05-02 微软官方开源免费的Blazor UI组件库 - Fluent UI Blazor
- 2025-05-02 盘点2024年推荐的6个Web开源项目(开源 webgis)
- 2025-05-02 什么是OWASP Top 10?web安全必读(owi是什么意思)
- 2025-05-02 ASP.NET Core跨平台技术内幕(asp.net mvc 跨域)
- 2025-05-02 一个基于.NET8+WPF开源的简单的工作流系统
- 2025-05-02 推荐一个支持低代码开发的OA开源系统
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)