在我们的应用程序中,我们需要获取运行时所有FastEndpoints端点的列表。
基本上我们需要所有端点的以下信息;
GroupName(如果不属于任何组则为空)
EndpointName(端点类名称)
路线(包括任何适用的路线前缀)
Http方法
之前,我们通过枚举
ControllerActionDescriptor
类型的 IActionDescriptorCollectionProvider
来获取 ApiController 的同类信息。
FastEndpoints 有
EndPointData
类,用于在调用 UseFastEndpoints
时内部扫描端点,但该类是内部的,不能在外部使用。
Swagger 是适合您的工具 - 它负责为您的 API 生成架构。它生成方便的 UI,并可以生成包含 API 相关信息的 JSON(模型、URL,您还可以自定义它以包含更多信息)。
Swagger 与 FastEndpoints 完美集成,示例应用程序:
dotnet new web
dotnet add package FastEndpoints
dotnet add package Swashbuckle.AspNetCore
Endpoint
示例类的程序启动中:
using FastEndpoints;
var builder = WebApplication.CreateBuilder();
builder.Services.AddFastEndpoints();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
app.UseFastEndpoints();
app.Run();
public class MyRequest
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
public class MyResponse
{
public string FullName { get; set; }
public bool IsOver18 { get; set; }
}
public class MyEndpoint : Endpoint<MyRequest, MyResponse>
{
public override void Configure()
{
Post("/api/user/create");
AllowAnonymous();
}
public override async Task HandleAsync(MyRequest req, CancellationToken ct)
{
await SendAsync(new()
{
FullName = req.FirstName + " " + req.LastName,
IsOver18 = req.Age > 18
});
}
}