.net core 中api 模型验证

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

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

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

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(
                        _ => "该字段不可为空。");
                })

添加ModelActionFiltermvc

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; }
    }
相关文章
相关标签/搜索