打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
基于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的端点服务接口,这里我们并没有创建任何控制器,请求地址为:

  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,代码如下:

  为支持作者的劳动成果,此内容需要 登录 后才能浏览

  运行项目,打开地址:

  localhost:56369/swagger 如果运行成功,你将看到如下界面:

  

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

  

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

  

  将获取到的二手QQ卖号平台令牌填入授权窗口中,如下:

  

  

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

  

  项目结构如下:

  

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux设备驱动子系统终极弹 - USB
ASP.NET Core 菜鸟之路:从Startup.cs说起
零基础ASP.NET Core MVC插件式开发
《Asp.Net Core3 + Vue3入坑教程》 - 6.异常处理与UserFriendlyException
Asp.net core 3.1实现路由Url根据命名空间自动生成
ASP.NET Core MVC/API(一)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服