我们提供安全,免费的手游软件下载!
我最近在编写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进行分组的要求,使用原生的方法还是不够清晰,原因在于:
要对 MapGroup 的值赋予变量名,比如说 var accountGroup = app.MapGroup("Account"),每个组都要想个名字。
不能清楚自己的边界,比如说写代码时,有可能出现插队的情况,本来accountGroup下面都是属于它的端点,结果不小心插进来一个别的。
因此,我对MapGroup进行了简单的扩展,并将最终结果记录在本文开头。
public static void MapGroup(this IEndpointRouteBuilder endpoints, [StringSyntax("Route")] string prefix, Action action)
{
var group = endpoints.MapGroup(prefix);
action(group);
}
总结:通过这种方式,代码结构已经变得更加清晰。若有任何疑问,欢迎在评论区与我联系。
热门资讯