基于ASP.NET Core 3.x的端点路由实现控制器和操作分离的接口服务

如题,今天为大家分享一种基于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的类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 如果运行成功,你将看到如下界面:

基于ASP.NET Core 3.x的端点路由实现控制器和操作分离的接口服务

这时,如果你直接点击【获取指定ID的学生信息】,接口返回的是401错误,如图:

基于ASP.NET Core 3.x的端点路由实现控制器和操作分离的接口服务

因为我们还未对接口访问进行授权,那么我们需要先请求授权接口:/api/v1/auth/grant_token,以获取用户令牌,如下:

基于ASP.NET Core 3.x的端点路由实现控制器和操作分离的接口服务

将获取到的令牌填入授权窗口中,如下:

基于ASP.NET Core 3.x的端点路由实现控制器和操作分离的接口服务

基于ASP.NET Core 3.x的端点路由实现控制器和操作分离的接口服务

最后,再请求【获取指定ID的学生信息】,得到正确的接口返回内容,如下:

基于ASP.NET Core 3.x的端点路由实现控制器和操作分离的接口服务

项目结构如下:

基于ASP.NET Core 3.x的端点路由实现控制器和操作分离的接口服务

本文为你分享的Ardalis.ApiEndpoints内容就到这里,使用Ardalis.ApiEndpoints,你可在不用创建控制器的场景下任意地组织和管理你的接口服务端点。感谢你的阅读!

展开阅读全文

页面更新:2024-04-24

标签:控制器   接口   操作   令牌   示例   路由   常规   成果   模式   结构   组织   文件   方法   项目   作者

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top