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; }
}

最新文章

  1. 使用filter获取http请求的出参以及入参
  2. React + Redux 入坑指南
  3. raw,cow,qcow,qcow2镜像的比较
  4. [ACM_动态规划] POJ 1050 To the Max ( 动态规划 二维 最大连续和 最大子矩阵)
  5. cut命令如何截取以空格隔开的字段
  6. ubuntu设置系统时间与网络时间同步
  7. Pro Android学习笔记(十一):了解Intent(中)
  8. sqlplus登录问题
  9. Notification的功能与用法
  10. JS中的作用域以及全局变量的问题
  11. WDA 新SELECT OPTION
  12. Word批量删除所有书签
  13. springboot 集成dubbo
  14. 【ASP.NET】第一个ASP.NET MVC应用程序
  15. StringBoot集成Rabbit Redis和ack机制双重保险,保障消息一定能够正确的消费
  16. [LeetCode] 796. Rotate String_Easy **KMP
  17. 转:PHP导出excel文件的几种方式
  18. 动态标绘演示系统1.0(for OpenLayers3)
  19. java基础----&gt;多个排序的拓展
  20. js 控制页面跳转的5种方法

热门文章

  1. 团队第一次作业(软工C#造梦厂)
  2. Dynamics 365 CRM Action 和 workflow 的区别
  3. 使用 CompletableFuture 异步组装数据
  4. 快速构建第三方api应用
  5. UML---&gt;活动图梳理
  6. vue中导入bootstrap.css
  7. 第一篇:CDH配置本地http服务
  8. C语言之灵魂 指针学习
  9. Spring 依赖注入两种方式
  10. MFC对话框和控件