aspnet-api-standards
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseASP.NET Core API Standards
ASP.NET Core API 规范
CRITICAL DIRECTIVE
核心指令
ONLY implement what is explicitly requested. Do NOT add unrequested features like:
- CORS configuration (unless asked for)
- Swagger/OpenAPI setup (unless asked for)
- Authentication/Authorization (unless asked for)
- Rate limiting, caching, compression (unless asked for)
- Additional middleware (unless asked for)
When user requests ONE thing (e.g., "create an exception filter"), implement ONLY that thing.
仅实现明确要求的功能。 请勿添加未被要求的功能,例如:
- CORS配置(除非明确要求)
- Swagger/OpenAPI配置(除非明确要求)
- 身份验证/授权(除非明确要求)
- 速率限制、缓存、压缩(除非明确要求)
- 额外中间件(除非明确要求)
当用户仅请求单一功能时(例如“创建一个异常过滤器”),仅实现该功能即可。
Core Controller Rules (ALWAYS Apply)
核心控制器规则(必须遵守)
Clean Controllers Pattern
简洁控制器模式
csharp
// REQUIRED structure
[ApiController]
[Route("api/[controller]")]
public class OrdersController(IMediator mediator) : ControllerBase
{
[HttpPost]
public async Task<IActionResult> CreateOrder(
[FromBody] CreateOrderCommand command,
CancellationToken cancellationToken)
{
var result = await mediator.Send(command, cancellationToken);
return CreatedAtAction(nameof(GetOrder), new { id = result }, result);
}
}MUST:
- Inject ONLY (never repositories or domain services)
IMediator - Use primary constructors
- Include in all async methods
CancellationToken - Apply attribute for automatic validation
[ApiController]
NEVER:
- Put business logic in controllers
- Inject repositories directly
- Use ,
.Result, or.Wait().GetAwaiter().GetResult()
csharp
// REQUIRED structure
[ApiController]
[Route("api/[controller]")]
public class OrdersController(IMediator mediator) : ControllerBase
{
[HttpPost]
public async Task<IActionResult> CreateOrder(
[FromBody] CreateOrderCommand command,
CancellationToken cancellationToken)
{
var result = await mediator.Send(command, cancellationToken);
return CreatedAtAction(nameof(GetOrder), new { id = result }, result);
}
}必须遵守:
- 仅注入(绝不直接注入仓储或领域服务)
IMediator - 使用主构造函数
- 在所有异步方法中包含
CancellationToken - 应用特性以启用自动验证
[ApiController]
绝对禁止:
- 在控制器中编写业务逻辑
- 直接注入仓储
- 使用、
.Result或.Wait().GetAwaiter().GetResult()
When to Read References
参考文档查阅场景
User asks about exception handling or error responses?
→ Read references/exception-handling.md
→ Read references/exception-handling.md
User asks about CORS, authentication, or authorization?
→ Read references/security.md
→ Read references/security.md
User asks about Swagger or API documentation?
→ Read references/swagger.md
→ Read references/swagger.md
User asks about middleware pipeline or Program.cs configuration?
→ Read references/middleware.md
→ Read references/middleware.md
用户询问异常处理或错误响应相关问题?
→ 查阅references/exception-handling.md
→ 查阅references/exception-handling.md
用户询问CORS、身份验证或授权相关问题?
→ 查阅references/security.md
→ 查阅references/security.md
用户询问Swagger或API文档相关问题?
→ 查阅references/swagger.md
→ 查阅references/swagger.md
用户询问中间件管道或Program.cs配置相关问题?
→ 查阅references/middleware.md
→ 查阅references/middleware.md
FluentValidation (Apply When Creating Commands/Queries)
FluentValidation(创建命令/查询时适用)
csharp
public class CreateOrderCommandValidator : AbstractValidator<CreateOrderCommand>
{
public CreateOrderCommandValidator()
{
RuleFor(x => x.CustomerId).NotEmpty();
RuleFor(x => x.Items).NotEmpty().Must(items => items.Count <= 50);
}
}Register in Program.cs:
csharp
builder.Services.AddValidatorsFromAssemblyContaining<CreateOrderCommandValidator>();
builder.Services.AddFluentValidationAutoValidation();csharp
public class CreateOrderCommandValidator : AbstractValidator<CreateOrderCommand>
{
public CreateOrderCommandValidator()
{
RuleFor(x => x.CustomerId).NotEmpty();
RuleFor(x => x.Items).NotEmpty().Must(items => items.Count <= 50);
}
}在Program.cs中注册:
csharp
builder.Services.AddValidatorsFromAssemblyContaining<CreateOrderCommandValidator>();
builder.Services.AddFluentValidationAutoValidation();