文檔中這麼定義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; } }