using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; namespace MoShiro.Backend.Api; public static class EndpointConventions { /// 每个端点都必须有 operationId(snake_case,资源_动作)、summary 和 tag。 public static RouteHandlerBuilder Api(this RouteHandlerBuilder builder, string operationId, string summary, string tag) => builder.WithName(operationId).WithSummary(summary).WithTags(tag); public static RouteHandlerBuilder Returns(this RouteHandlerBuilder builder, int status = StatusCodes.Status200OK) => builder.Produces(status); /// 登记该端点可能返回的错误状态(problem+json),让 OpenAPI 文档完整。 public static RouteHandlerBuilder ProducesProblems(this RouteHandlerBuilder builder, params int[] statuses) { foreach (int status in statuses) { builder.Produces(status, Problems.ContentType); } return builder; } }