.net Core 中自定义筛选器
2022/8/12 23:26:37
本文主要是介绍.net Core 中自定义筛选器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
异常筛选器:
定义:
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; public class MyExceptionFilter : IAsyncExceptionFilter { private readonly ILogger<MyExceptionFilter> logger; private readonly IHostEnvironment env; public MyExceptionFilter(ILogger<MyExceptionFilter> logger, IHostEnvironment env) { this.logger = logger; this.env = env; } public Task OnExceptionAsync(ExceptionContext context) { Exception exception = context.Exception; logger.LogError(exception, "UnhandledException occured"); string message; if (env.IsDevelopment()) { message = exception.ToString(); } else { message = "程序中出现未处理异常"; } ObjectResult result = new ObjectResult(new { code = 500, message = message }); result.StatusCode = 500; context.Result = result; context.ExceptionHandled = true; return Task.CompletedTask; } }
在program。cs 注册这个筛选器:
builder.Services.Configure<MvcOptions>(options => { options.Filters.Add<MyExceptionFilter>(); });
普通操作筛选器:
定义:
using Microsoft.AspNetCore.Mvc.Filters; public class MyActionFilter1 : IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { Console.WriteLine("MyActionFilter 1:开始执行"); ActionExecutedContext r = await next(); if (r.Exception != null) { Console.WriteLine("MyActionFilter 1:执行失败"); } else { Console.WriteLine("MyActionFilter 1:执行成功"); } } }
自动开启事务,自动提交事务的筛选器
using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Filters; using System.Reflection; using System.Transactions; namespace 自动启用事务的筛选器 { public class TransactionScopeFilter : IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { bool hasNotTransactionalAttribute = false; if (context.ActionDescriptor is ControllerActionDescriptor) { var actionDesc = (ControllerActionDescriptor)context.ActionDescriptor; hasNotTransactionalAttribute = actionDesc.MethodInfo .IsDefined(typeof(NotTransactionalAttribute)); } if (hasNotTransactionalAttribute) { await next(); return; } using var txScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled); var result = await next(); if (result.Exception == null) { txScope.Complete(); } } } }
[AttributeUsage(AttributeTargets.Method)] public class NotTransactionalAttribute : Attribute { }
以上示例代码来自杨中科老师:
NETBookMaterials/第七章 at main · yangzhongke/NETBookMaterials · GitHub
这篇关于.net Core 中自定义筛选器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#