.net core 避免在 controller/action 中重复 ModelState

.net core Avoid repeating ModelState in controller/action

我在 .net 核心 2.x 项目中工作。 我在每个动作中都写了下面的代码来验证我的模型状态。

        if (ModelState.IsValid)
        {
            // Do something
        }
        else
        {
            // Return Modelstate Error
        }

我想知道避免在每个操作中重复条件的最佳做法是什么。 我想在到达操作之前验证模型状态,如果模型状态无效,则 return 适当的错误消息。

更新

注意。我的操作很简单 Api 操作,我只想 return 错误(在我的模型中)以字符串数组的形式出现在 HttpContext 主体中。

模型示例 属性。

    [Required(ErrorMessage = "Fill the name Please !!!")]
    public string FirstName { get; set; }

行动示例。

    [HttpPost]
    public void Create([FromBody]MyModel model)
    {
        if (ModelState.IsValid)
        {
            // Do something
        }
        else
        {
            // Return Modelstate Error
        }
    }

尝试这样的事情

 public class ModelStateValidationFilter : ActionFilterAttribute
    {
        public string ErrorPage;

        public override void OnActionExecuting(ActionExecutingContext context)
        {


 if (!context.ModelState.IsValid)
        {
            //return error result
            List<string> list = (from modelState in context.ModelState.Values from error in modelState.Errors select error.ErrorMessage).ToList();
            context.Result = new BadRequestObjectResult(list);

            //or redirect to some result
            context.Result = new RedirectToRouteResult(ErrorPage);

            //or do whatever you need
        }

        base.OnActionExecuting(context);
    }
}

然后像这样添加

在控制器上

[ModelStateValidationFilter(ErrorPage = "somepage")]
    public class SomeController : Controller

正在行动

[ModelStateValidationFilter(ErrorPage = "somepage")]
public IActionResult SomeAction(somemodel model)

或通过启动添加到所有