zoukankan      html  css  js  c++  java
  • .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; }
        }
    
  • 相关阅读:
    java操作生成jar包 和写入jar包
    jboss配置jndi连接池
    windows 域的LDAP查询相关举例
    LDAP error Code 及解决方法
    HDU 6417
    CF1299D Around the World
    codechef Chef and The Colored Grid
    Educational Codeforces Round 82 (Rated for Div. 2)
    CF1237F Balanced Domino Placements
    CF1254E Send Tree to Charlie
  • 原文地址:https://www.cnblogs.com/WNpursue/p/12227956.html
Copyright © 2011-2022 走看看