我们提供安全,免费的手游软件下载!

安卓手机游戏下载_安卓手机软件下载_安卓手机应用免费下载-先锋下载

当前位置: 主页 > 软件教程 > 软件教程

精简DotNET Minimal API的方法

来源:网络 更新时间:2024-05-20 18:30:53

我最近在编写Minimal API时,发现在查看每个API时无法清晰地展示其逻辑处理过程,原因在于WebAPI中的逻辑处理过程不断增长。因此,我思考如何将API简化到一行,经过一番思索,我找到了简化DotNET Minimal API的方法,并记录下来以便为有需要的人提供帮助。我的灵感来自于C# 11的功能 - 接口中的静态虚拟成员,通过静态虚拟成员可以清晰地整理整个API。

在Program.cs中,我们只需要一行代码就能清晰地了解到整个代码情况,无需关注平常并不太重要的处理过程和请求方式。


我发现只需要三个简单的步骤就能实现这一目标,而且无需使用反射和其他复杂的过程。

第一步,需要创建一个带有静态抽象函数的接口IEndpointBase。

public interface IEndpointBase
{
    public static abstract IEnumerable HTTPMethods();
    public static abstract Delegate Handler();
}

第二步,实现IEndpointBase接口。

public class Login : IEndpointBase
{
    // 实现代码略
}

第三步,处理静态IEndpointBase,此时我们已经完成了这个事情。

public static RouteHandlerBuilder MapMethods(this IEndpointRouteBuilder app, [StringSyntax("Route")] string pattern) where T : IEndpointBase
{
    return app.MapMethods(pattern, T.HTTPMethods(), T.Handler());
}

单纯地使用扩展好的MapMethods已经足够清晰了。


但如果有对API进行分组的要求,使用原生的方法还是不够清晰,原因在于:

  1. 要对 MapGroup 的值赋予变量名,比如说 var accountGroup = app.MapGroup("Account"),每个组都要想个名字。

  2. 不能清楚自己的边界,比如说写代码时,有可能出现插队的情况,本来accountGroup下面都是属于它的端点,结果不小心插进来一个别的。

因此,我对MapGroup进行了简单的扩展,并将最终结果记录在本文开头。

public static void MapGroup(this IEndpointRouteBuilder endpoints, [StringSyntax("Route")] string prefix, Action action)
{
    var group = endpoints.MapGroup(prefix);
    action(group);
}

总结:通过这种方式,代码结构已经变得更加清晰。若有任何疑问,欢迎在评论区与我联系。