我几乎总是想在回发时检查 ModelSate.IsValid
是否被调用。而且必须在每次回发开始时进行检查违反了 DRY 原则,有没有办法让它自动检查?
例子:
[HttpPost("RegisterUser")]
[AllowAnonymous]
public async Task<IActionResult> RegisterUser([FromBody] UserRegisterViewModel vmodel)
{
if(!ModelState.IsValid) // This code is repeated at every postback
return ModelInvalidAction(); // Is there a way to avoid having to write it down?
// do other things
return StatusCode(201);
}
最佳答案
框架提供了一个抽象的ActionFilterAttribute
,您可以将其子类化。
您可以使用操作过滤器来自动验证模型状态并在状态无效时返回任何错误:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
context.Result = new BadRequestObjectResult(context.ModelState);
}
}
}
然后您可以将它用于单个操作或全局注册
关于c# - 如何避免在每次回发时调用 ModelState.IsValid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48832195/