- 新增 IApiResponse 统一响应契约,覆盖普通响应和分页响应
- 扩展端点映射,支持 IApiResponse 和带请求 DTO 的 MapXxx 重载
- 增加 Body、Query、Route Values 到请求 DTO 的自动绑定
- 增加 PC 端路由模式匹配,支持 {id} 和 {id:int}
- API 与 PC 端点上下文补充路由参数传递
- 调整 OpenAPI 请求类型处理,避免 GET/DELETE 被标记为 JSON Body
- 鉴权端点迁移到强类型请求绑定和 IApiResponse 返回
- 增加统一端点文件流响应支持
74 lines
3.4 KiB
C#
74 lines
3.4 KiB
C#
using Avalonia_Services.Core;
|
|
using Avalonia_Services.Services.AuthService;
|
|
|
|
namespace Avalonia_Services.Endpoints
|
|
{
|
|
/// <summary>
|
|
/// 认证端点统一入口。端点定义在这里,宿主项目只提供对应实现。
|
|
/// </summary>
|
|
public static class AuthEndpoints
|
|
{
|
|
/// <summary>
|
|
/// 配置 API 端鉴权端点(登录、刷新、登出)。
|
|
/// </summary>
|
|
/// <param name="builder">端点构建器。</param>
|
|
public static void ConfigureApi(ServiceEndpointBuilder builder)
|
|
{
|
|
builder.ConfigureEndpoints(endpoints =>
|
|
{
|
|
endpoints.MapPost<IApiAuthEndpointService, ApiLoginRequest>(
|
|
"api/auth/login",
|
|
(service, request, ctx) => service.LoginAsync(request, ctx))
|
|
.WithName("ApiLogin")
|
|
.WithOpenApi("Auth", "API 登录,返回 access token 和 refresh token。", "", typeof(ApiLoginRequest), typeof(AuthTokenResponse))
|
|
.ApiOnly();
|
|
|
|
endpoints.MapPost<IApiAuthEndpointService, ApiRefreshTokenRequest>(
|
|
"api/auth/refresh",
|
|
(service, request, ctx) => service.RefreshAsync(request, ctx))
|
|
.WithName("ApiRefresh")
|
|
.WithOpenApi("Auth", "API refresh token 轮换。", "", typeof(ApiRefreshTokenRequest), typeof(AuthTokenResponse))
|
|
.ApiOnly();
|
|
|
|
endpoints.MapPost<IApiAuthEndpointService, ApiLogoutRequest>(
|
|
"api/auth/logout",
|
|
(service, request, ctx) => service.LogoutAsync(request, ctx))
|
|
.WithName("ApiLogout")
|
|
.WithOpenApi("Auth", "API 退出登录并吊销 refresh token。", "", typeof(ApiLogoutRequest))
|
|
.ApiOnly();
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// 配置 PC 端鉴权端点(授权码登录、刷新、登出)。
|
|
/// </summary>
|
|
/// <param name="builder">端点构建器。</param>
|
|
public static void ConfigurePc(ServiceEndpointBuilder builder)
|
|
{
|
|
builder.ConfigureEndpoints(endpoints =>
|
|
{
|
|
endpoints.MapPost<IPcAuthEndpointService, PcAuthorizeRequest>(
|
|
"api/pc/auth/authorize",
|
|
(service, request, ctx) => service.AuthorizeAsync(request, ctx))
|
|
.WithName("PcAuthorize")
|
|
.WithOpenApi("Auth", "PC 授权码登录,生成本地全局 token。", "", typeof(PcAuthorizeRequest), typeof(PcTokenResponse))
|
|
.PcOnly();
|
|
|
|
endpoints.MapPost<IPcAuthEndpointService, PcRefreshRequest>(
|
|
"api/pc/auth/refresh",
|
|
(service, request, ctx) => service.RefreshAsync(request, ctx))
|
|
.WithName("PcRefresh")
|
|
.WithOpenApi("Auth", "PC 全局 token 刷新。", "", typeof(PcRefreshRequest), typeof(PcTokenResponse))
|
|
.PcOnly();
|
|
|
|
endpoints.MapPost<IPcAuthEndpointService, PcLogoutRequest>(
|
|
"api/pc/auth/logout",
|
|
(service, request, ctx) => service.LogoutAsync(request, ctx))
|
|
.WithName("PcLogout")
|
|
.WithOpenApi("Auth", "PC 退出登录。", "", typeof(PcLogoutRequest))
|
|
.PcOnly();
|
|
});
|
|
}
|
|
}
|
|
}
|