【问题标题】:Globally ModelState Validation In Asp.Net Core MvcAsp.Net Core Mvc 中的全局模型状态验证
【发布时间】:2019-03-13 15:51:08
【问题描述】:

如何创建一个自定义操作过滤器来检查 ModelState 是否有效,如果不是,它会将 ModelState 错误返回到同一视图? 我想编写一个自定义操作过滤器,在所有 POST 请求之前,确保 ModelState 有效,如果 ModelState 无效,它会将 ModelState 错误返回到同一视图。

这是我的示例代码。但我真的不知道如何将 ModelState 错误返回到同一个视图。

namespace Site.Web.Infrastructures.CustomValidationAttribute
{
    public class GlobalMvcValidateModelStateAttribute : ActionFilterAttribute
    {
        public override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            if (!context.ModelState.IsValid)
            {
                List<string> list = (from modelState in context.ModelState.Values from error in modelState.Errors select error.ErrorMessage).ToList();

                //Also add exceptions.
                list.AddRange(from modelState in context.ModelState.Values from error in modelState.Errors select error.Exception.ToString());

                context.Result = new BadRequestObjectResult(list);
            }

            return base.OnActionExecutionAsync(context, next);
        }
    }
}

【问题讨论】:

  • 请包含一些代码,以便准确地回答您的问题
  • 你好。我将代码添加到我的问题中

标签: asp.net-core .net-core asp.net-core-mvc


【解决方案1】:

以下是为视图添加全局 ModelState 验证所需的内容:

public class GlobalModelStateValidatorAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.ModelState.IsValid)
        {
            Controller controller = context.Controller as Controller;
            object model = context.ActionArguments.Any()
               ? context.ActionArguments.First().Value
               : null;

            context.Result = (IActionResult)controller?.View(model)
               ?? new BadRequestResult();
        }

        base.OnActionExecuting(context);
    }
}

那么你需要在你的应用中注册这个过滤器:

services.AddMvc(opt =>
{
    opt.Filters.Add(typeof(GlobalModelStateValidatorAttribute));
});

这是代码示例:https://github.com/MoienTajik/AspNetCoreGlobalModelStateValidator

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 2013-08-07
    • 1970-01-01
    • 2010-12-06
    • 2022-01-21
    • 2010-12-07
    • 2017-05-20
    相关资源
    最近更新 更多