FluentValidation.AspNetCore 在 Web API 项目中不工作
FluentValidation.AspNetCore is not working in Web API project
我正在使用 nuget 包 FluentValidation.AspNetCore 11.0.1
。我想根据端点的条件验证我的模型。根据 Fluent 验证文档添加了所需的代码块,但我的验证仍然不起作用。
当我的模型 属性 包含验证器 class 中的字母“a”时,我想 return 验证错误。请检查添加到我的项目中的以下代码块以进行验证。
验证者class
public class TestModelValidate : AbstractValidator<TestModel>
{
public TestModelValidate()
{
RuleFor(t => t.Summary.ToString()).NotEmpty().NotNull().When(x => x.Summary.Contains("a")).WithMessage("Cannot be null");
}
}
启动class
将下面的代码块添加到 Startup class 中的 ConfigureServices()
方法。
services.AddControllers().AddFluentValidation(fvc => fvc.RegisterValidatorsFromAssemblyContaining<TestModelValidate>());
型号class
public class TestModel
{
public string Summary { get; set; }
}
控制器class
[HttpPost]
public IActionResult Test(TestModel model)
{
if (!ModelState.IsValid)
{
return new BadRequestObjectResult(ModelState);
}
return Ok("SUCCESS");
}
我正在使用 Postman 将以下 JSON 对象传递到端点。
{
"summary": "a"
}
实际结果 - SUCCESS
预期结果 - Validation Error
感谢您的帮助!
如果您想使用ModelState.IsValid
,我们可以尝试将ApiBehaviorOptions.SuppressModelStateInvalidFilter
设置为true
。
builder.Services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
我觉得你可以试试用Must
加上条件!x.Contains("a")
来判断你的逻辑。
public class TestModelValidate : AbstractValidator<TestModel>
{
public TestModelValidate()
{
RuleFor(t => t.Summary).NotEmpty().NotNull().WithMessage("Cannot be null")
.Must(x => !x.Contains("a")).WithMessage("Can't contain a");
}
}
我正在使用 nuget 包 FluentValidation.AspNetCore 11.0.1
。我想根据端点的条件验证我的模型。根据 Fluent 验证文档添加了所需的代码块,但我的验证仍然不起作用。
当我的模型 属性 包含验证器 class 中的字母“a”时,我想 return 验证错误。请检查添加到我的项目中的以下代码块以进行验证。
验证者class
public class TestModelValidate : AbstractValidator<TestModel>
{
public TestModelValidate()
{
RuleFor(t => t.Summary.ToString()).NotEmpty().NotNull().When(x => x.Summary.Contains("a")).WithMessage("Cannot be null");
}
}
启动class
将下面的代码块添加到 Startup class 中的 ConfigureServices()
方法。
services.AddControllers().AddFluentValidation(fvc => fvc.RegisterValidatorsFromAssemblyContaining<TestModelValidate>());
型号class
public class TestModel
{
public string Summary { get; set; }
}
控制器class
[HttpPost]
public IActionResult Test(TestModel model)
{
if (!ModelState.IsValid)
{
return new BadRequestObjectResult(ModelState);
}
return Ok("SUCCESS");
}
我正在使用 Postman 将以下 JSON 对象传递到端点。
{
"summary": "a"
}
实际结果 - SUCCESS
预期结果 - Validation Error
感谢您的帮助!
如果您想使用ModelState.IsValid
,我们可以尝试将ApiBehaviorOptions.SuppressModelStateInvalidFilter
设置为true
。
builder.Services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
我觉得你可以试试用Must
加上条件!x.Contains("a")
来判断你的逻辑。
public class TestModelValidate : AbstractValidator<TestModel>
{
public TestModelValidate()
{
RuleFor(t => t.Summary).NotEmpty().NotNull().WithMessage("Cannot be null")
.Must(x => !x.Contains("a")).WithMessage("Can't contain a");
}
}