我可以发誓,前段时间我能够调试它并进入 Validation 类,但现在看来这只是关于一些客户端验证,它不会在后端中间件中验证。
确保您的剃刀视图没有添加jquery.validate.min.js 和jquery.validate.unobtrusive.min.js。
对于使用 asp.net core 默认模板,您可以在您的 razor 视图中避免使用以下代码:
@*@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}*@
然后将以下代码添加到您的后端:
if (!ModelState.IsValid)
{
return View(model);
}
更新:
如果您想在控制器之前进行验证,我建议您可以自定义 ActionFilter。这是一个使用 asp.net core 3.1 web api 的工作演示:
型号:
public class Test
{
[Range(1,4)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
}
自定义动作过滤器:
public class ValidationFilter : IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
}
public void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
context.Result = new JsonResult(context.ModelState.Select(m=>m.Value).ToList())
{
StatusCode = 400
};
}
}
}
控制器:
[Route("api/[controller]")]
public class ValuesController : ControllerBase
{
// POST api/<controller>
[HttpPost]
public void Post(Test test)
{
}
}
在 Startup.cs 中注册:
services.AddControllers(config =>
{
config.Filters.Add(new ValidationFilter());
});
结果: