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; } }
来源:https://www.cnblogs.com/WNpursue/p/12227956.html