文档中这么定义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 }); }
starp.cs缓存
services.AddControllers(options => { options.Filters.Add(new ModelActionFilter()); options.Filters.AddService<ExceptionFilter>(); options.MaxModelValidationErrors = 50; options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor( _ => "该字段不可为空。"); })
添加ModelActionFilter
mvc
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; } }