服务器部署测试~~~

This commit is contained in:
heiye111
2025-10-10 16:02:38 +08:00
parent 8ab52738c0
commit 5c186aa446
87 changed files with 5062 additions and 167 deletions

View File

@@ -0,0 +1,45 @@
// Filters/ValidationFilter.cs
using FluentValidation;
// 这是一个可复用的通用过滤器T 是我们要验证的模型类型
public class ValidationFilter<T> : IEndpointFilter where T : class
{
private readonly IValidator<T> _validator;
// 过滤器可以通过构造函数注入它需要的服务,这里我们注入对应的验证器
public ValidationFilter(IValidator<T> validator)
{
_validator = validator;
}
public async ValueTask<object?> InvokeAsync(
EndpointFilterInvocationContext context,
EndpointFilterDelegate next)
{
// 1. 从端点参数中找到我们需要验证的对象
// 我们假设它总是第一个参数,如果不是,可以修改这里的逻辑
var validationTarget = context.Arguments.FirstOrDefault(a => a?.GetType() == typeof(T)) as T;
// 如果在参数中找不到该类型的对象,直接跳过验证
if (validationTarget is null)
{
// 或者可以返回一个错误,这取决于你的业务需求
// return Results.BadRequest("Could not find validation target in request.");
return await next(context);
}
// 2. 使用从DI容器注入的验证器进行验证
var validationResult = await _validator.ValidateAsync(validationTarget);
// 3. 如果验证失败立即中断请求并返回一个标准的400 ValidationProblem
if (!validationResult.IsValid)
{
// 将 FluentValidation 的错误结果转换为 ASP.NET Core 标准的错误响应
return Results.ValidationProblem(validationResult.ToDictionary());
}
// 4. 如果验证成功,则继续执行后续的过滤器或端点本身
return await next(context);
}
}