嗯,你可以有一个部分的Program类:
partial class Program
{
static void MapProductEndpoints(WebApplication app)
{
app.MapGet("/products/{id}", (int id) => Results.Ok());
}
}
var app = builder.Build();
MapProductEndpoints(app);
或者你可以使用静态类或扩展方法:
public static class ProductEndpoints
{
public static void Map(WebApplication app)
{
app.MapGet("/products/{id}", (int id) => Results.Ok());
}
}
var app = builder.Build();
ProductEndpoints.Map(app);
public static class WebApplicationProductEndpointsExtensions
{
public static void MapProductEndpoints(this WebApplication app)
{
app.MapGet("/products/{id}", (int id) => Results.Ok());
}
}
var app = builder.Build();
app.MapProductEndpoints();
或者您可以将其包装在一个接口中,并进行程序集扫描:
public interface IEndpoints
{
static abstract void Map(WebApplication app);
}
public class ProductEndpoints : IEndpoints
{
public static void Map(WebApplication app)
{
app.MapGet("/products/{id}", (int id) => Results.Ok());
}
}
var app = builder.Build();
var assembly = Assembly.GetExecutingAssembly();
var endpointsCollection = assembly
.GetTypes()
.Where(t => t.GetInterfaces().Contains(typeof(IEndpoints)) && !t.IsInterface);
foreach (var endpoints in endpointsCollection)
{
var map = endpoints.GetMethod(nameof(IEndpoints.Map));
map.Invoke(null, new[] { app });
}
你也可以尝试每个文件设置一个端点,不过这样更难强制执行。