(精华)2020年7月21日 ASP.NET Core 全局过滤器的使用
发布日期:2021-06-29 15:08:10 浏览次数:3 分类:技术文章

本文共 2020 字,大约阅读时间需要 6 分钟。

#region 添加全局异常过滤器和参数校验过滤器services.AddControllers(options =>{
options.Filters.Add
(); options.Filters.Add
();});#endregion

ValidFilterAttribute

//参数校验public class ValidFilterAttribute : BaseActionFilterAsync    {
public override async Task OnActionExecuting(ActionExecutingContext context) {
if (!context.ModelState.IsValid) {
var msgList = context.ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage); context.Result = Error(string.Join(",", msgList)); } await Task.CompletedTask; } }

GlobalExceptionFilter

//全局错误异常校验public class GlobalExceptionFilter : BaseActionFilterAsync, IAsyncExceptionFilter{
readonly ILogger _logger; public GlobalExceptionFilter(ILogger
logger) {
_logger = logger; } public async Task OnExceptionAsync(ExceptionContext context) {
Exception ex = context.Exception; if (ex is BusException busEx) {
_logger.LogInformation(busEx.Message); context.Result = Error(busEx.Message, busEx.ErrorCode); } else {
_logger.LogError(ex, ""); context.Result = Error(ex.Message); } await Task.CompletedTask; }}

BaseActionFilterAsync

public abstract class BaseActionFilterAsync : Attribute, IAsyncActionFilter {
public async virtual Task OnActionExecuting(ActionExecutingContext context) {
await Task.CompletedTask; } public async virtual Task OnActionExecuted(ActionExecutedContext context) {
await Task.CompletedTask; } public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) {
await OnActionExecuting(context); if (context.Result == null) {
var nextContext = await next(); await OnActionExecuted(nextContext); } }}

转载地址:https://codeboy.blog.csdn.net/article/details/107491587 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(精华)2020年7月21日 ASP.NET Core 容器伪属性注入
下一篇:(精华)2020年7月21日 ASP.NET Core 模型验证过滤器

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月18日 09时41分14秒