• .net core 中api 模型验证


    AddControllers/AddMvc方法允许添加自定义ActionFilterAttribute进行过滤

    文档中这么定义Filter:
    可以创建自定义筛选器,用于处理横切关注点。 横切关注点的示例包括错误处理、缓存、配置、授权和日志记录。 筛选器可以避免复制代码。 例如,错误处理异常筛选器可以合并错误处理。
    通过不同的接口定义,筛选器同时支持同步和异步实现。
    同步筛选器在其管道阶段之前和之后运行代码。 例如,OnActionExecuting 在调用操作方法之前调用。 OnActionExecuted 在操作方法返回之后调用。
    添加自定义模型验证

    自定义筛选器依赖注入方式

    public void ConfigureServices(IServiceCollection services)
    {
        // Add service filters.
        services.AddScoped<AddHeaderResultServiceFilter>();
        services.AddScoped<SampleActionFilterAttribute>();
    
        services.AddControllersWithViews(options =>
       {
           options.Filters.Add(new AddHeaderAttribute("GlobalAddHeader",
               "Result filter added to MvcOptions.Filters"));         // An instance
            options.Filters.Add(typeof(MySampleActionFilter));         // By type
            options.Filters.Add(new SampleGlobalActionFilter());       // An instance
        });
    }
    

    .net core 中 api 模型验证

    starp.cs

                services.AddControllers(options =>
                    {
                        options.Filters.Add(new ModelActionFilter());
                        options.Filters.AddService<ExceptionFilter>();
                        options.MaxModelValidationErrors = 50;
                        options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(
                            _ => "该字段不可为空。");
                    })
    

    添加ModelActionFilter

        public class ModelActionFilter : ActionFilterAttribute, IActionFilter
        {
            public override void OnActionExecuting(ActionExecutingContext context)
            {
                if (!context.ModelState.IsValid)
                {
                    var errorResults = new List<ErrorResultDto>();
                    foreach (var item in context.ModelState)
                    {
                        var result = new ErrorResultDto
                        {
                            Field = item.Key,
                            Msg = "",
                        };
                        foreach (var error in item.Value.Errors)
                        {
                            if (!string.IsNullOrEmpty(result.Msg))
                            {
                                result.Msg += '|';
                            }
                            result.Msg += error.ErrorMessage;
                        }
                        errorResults.Add(result);
                    }
                    context.Result = new JsonResult(Result.FromCode(ResultCode.InvalidData, errorResults));
                }
            }
        }
    
        public class ErrorResultDto
        {
            /// <summary>
            /// 参数领域
            /// </summary>
            public string Field { get; set; }
    
            /// <summary>
            /// 错误信息
            /// </summary>
            public string Msg { get; set; }
        }
    
  • 相关阅读:
    获取父子栏目内容的知识点总结:更多信息页面的信息内容获取
    获取栏目内容的知识点总结:SingleInfoSortPortlet类型笔记(单栏目的获取)
    JBPM插件安装(MyEclipse8.5测试成功)和配置
    获取栏目内容的知识点总结:KnobInfoSortPortlet类型笔记(没有层级关系的栏目信息)
    HTML的事件说明
    正交投影、格拉姆施密特正交(一)
    子级Repeater获取父级Repeater绑定项的值
    启用IIS6的Gzip压缩功能
    属性IsLocked不可用于登录"[sa]解决办法
    在IE流览器中正确显示PNG透明图片
  • 原文地址:https://www.cnblogs.com/augustuss/p/12742130.html
Copyright © 2020-2023  润新知