【发布时间】:2021-08-19 08:29:16
【问题描述】:
我使用以下设置创建了一个新的 .Net 5 Web API
public class MyController : ControllerBase
{
[HttpGet("{Title}")]
public ActionResult<string> Get([FromRoute] RouteModel routeModel)
{
return Ok(routeModel);
}
}
public class RouteModel
{
[MinLength(3)]
public string Title { get; set; }
}
请求验证工作正常。由于我使用的是 FluentValidation,因此我安装了该软件包
FluentValidation.AspNetCore v10.3.0
并将Startup.ConfigureServices 方法更新为
public void ConfigureServices(IServiceCollection services)
{
services.AddValidatorsFromAssemblies(AppDomain.CurrentDomain.GetAssemblies());
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApplication", Version = "v1" });
});
}
我没有使用数据注释,而是从 RouteModel.Title 中删除了数据注释并创建了这个验证器
public class RouteModelValidator : AbstractValidator<RouteModel>
{
public RouteModelValidator()
{
RuleFor(model => model.Title).MinimumLength(3);
}
}
我希望ValidationException,如果标题的长度小于 3,这将导致 500 状态代码。但似乎不再有验证触发器,请求总是通过。
有人知道缺少什么吗?
【问题讨论】:
-
您能分享一下与 FluentValidation 注册相关的 ConfigureServices 方法中的所有代码吗?
-
当然,我更新了我的问题
-
请尝试一下:
services.AddFluentValidation(x => x.RegisterValidatorsFromAssemblies(AppDomain.CurrentDomain.GetAssemblies())); -
你可以在这里看到 3 个文件 pastebin.com/KVPwtWjm 当我使用
title = "a"发送请求时,我会期待一个例外。该代码有异常吗? -
啊,解决了 :) 如果你愿意,你可以创建一个答案?
标签: c# .net-5 fluentvalidation