.net core避免在控制器/操作中重复ModelState

时间:2017-12-09 06:38:04

标签: .net validation asp.net-core modelstate

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

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

我想知道避免在每个动作中重复这个条件的最佳做法是什么。 我想在到达操作之前验证modelstate,如果modelstate无效,则返回相应的错误消息。

更新

请注意。我的动作是简单的Api动作,我只想以字符串数组的形式在HttpContext Body中返回错误(在我的模型中)。

例如Model Property。

    [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
        }
    }

1 个答案:

答案 0 :(得分:2)

尝试这样的想法

 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)

或通过启动添加到所有