.net core 中api 模型验证

2021-01-15 15:12

阅读:698

标签:title   key   tps   list   api   json   配置   copy   href   

原文:.net core 中api 模型验证

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

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

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

Copy
public void ConfigureServices(IServiceCollection services) { // Add service filters. services.AddScoped(); services.AddScoped(); 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

Copy
services.AddControllers(options => { options.Filters.Add(new ModelActionFilter()); options.Filters.AddService(); options.MaxModelValidationErrors = 50; options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor( _ => "该字段不可为空。"); })

添加ModelActionFilter

Copy
public class ModelActionFilter : ActionFilterAttribute, IActionFilter { public override void OnActionExecuting(ActionExecutingContext context) { if (!context.ModelState.IsValid) { var errorResults = new List(); 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 { /// /// 参数领域 /// public string Field { get; set; } /// /// 错误信息 /// public string Msg { get; set; } }

.net core 中api 模型验证

标签:title   key   tps   list   api   json   配置   copy   href   

原文地址:https://www.cnblogs.com/lonelyxmas/p/12239130.html


评论


亲,登录后才可以留言!