.net core 3.1 过滤器(Filter) 和AOP面向切面拦截器
2021-01-17 05:12
标签:red 大小写 一个 exception uil contex ISE resource 要求 Filter总共有五种,Authorization Filter,Resource Filter,Exception Filter,Action Filter,Result Filter 然后在Startup.cs 注入过滤器 Action Filter 设置 新增全局过滤器GlobalActionFilter.cs 在方法执行前后,会跳转至以下两个方法,方便追踪接口执行情况 权限控制过滤器 //这里可以做复杂的权限控制操作 资源过滤器 结果过滤器,可以对结果进行格式化、大小写转换等一系列操作。 使用Result Filter 需要实现IResultFilter 抽象接口,接口要求实现 完毕 可以在全局注入 AOP拦截器 LogInterceptor 设置 安装Castle.Core,Autofac.Extras.DynamicProxy 新建LogInterceptor.cs ,继承IInterceptor 在Startup.cs 新增以下代码 针对某个类或者某个方法做拦截时 首先新建一个拦截器 MyInterceptor 然后Startup.cs 中ConfigureContainer代码如下 把LogInterceptor 代码注释,但是要保留接口拦截EnableInterfaceInterceptors() ,注入MyInterceptor 然后在需要拦截的接口中添加以下代码 拦截器设置完毕,当调用ITestService 的全部方法都会跳转拦截器 Filter和 LogInterceptor 可以同时共存,执行顺序是: ActionFilter 的OnActionExecuting =》LogInterceptor 的Intercept =》ActionFilter 的OnActionExecuted 如果接口有异常,不会跳转LogInterceptor ,而是进入ExceptionFilter,顺序是: ActionFilter 的OnActionExecuting =》ActionFilter 的OnActionExecuted =》ExceptionFilter 的OnException 原文 https://www.cnblogs.com/redo/p/12575119.html .net core 3.1 过滤器(Filter) 和AOP面向切面拦截器 标签:red 大小写 一个 exception uil contex ISE resource 要求 原文地址:https://www.cnblogs.com/netlock/p/13371178.htmlException Filter 设置
新增全局异常过滤器GlobalExceptionFilter.cs,
当出现异常时进入此方法,可在这针对不同的异常做相关处理并返回指定数据,避免直接把错误暴露给用户
public class GlobalExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext context)
{
Exception ex = context.Exception;
string errMsg = "GlobalExceptionFilter-OnException:" + ex.Message;
if (context.Exception.GetType() == typeof(ExecuteException))
{
//针对不同的自定义异常,做不同处理
MsgModelstring> msgModel = new MsgModelstring>()
{
Status = false,
Msg = errMsg,
Errcode = "AA001"
};
context.Result = new JsonResult(msgModel);
context.ExceptionHandled = true;
}
else
{
context.Result = new JsonResult(errMsg);
context.ExceptionHandled = true;
}
LogHelper.Error(errMsg);
}
}
public class GlobalActionFilter : IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
//LogHelper.Info("OnActionExecuted");
//执行方法后执行这
}
public void OnActionExecuting(ActionExecutingContext context)
{
//LogHelper.Info("OnActionExecuting");
//执行方法前先执行这
}
}
Authonization Filter
通过 Authonization Filter 可以实现复杂的权限角色认证
、登陆授权
等操作///
//if (context.HttpContext.User.Identity.Name != "1") //简单的做一个示范
//{
// //未通过验证则跳转到无权限提示页
// RedirectToActionResult content = new RedirectToActionResult("NoAuth", "Exception", null);
// context.Result = content;
//
}
}
Resource Filter
可以通过Resource Filter 进行资源缓存
、防盗链
等操作。
使用Resource Filter 要求实现IResourceFilter 抽象接口public class ResourceFilter : Attribute,IResourceFilter
{
public void OnResourceExecuted(ResourceExecutedContext context)
{
// 执行完后的操作
}
public void OnResourceExecuting(ResourceExecutingContext context)
{
// 执行中的过滤器管道
}
}
Result Filter
OnResultExecuting
方法 和OnResultExecuted
方法
OnResultExecuting
:Called before the action result executes. 在操作结果执行之前调用OnResultExecuted
:Called after the action result executes. 在操作结果执行之后调用public class ResultFilter : Attribute, IResultFilter
{
public void OnResultExecuted(ResultExecutedContext context)
{
// 在结果执行之后调用的操作...
}
public void OnResultExecuting(ResultExecutingContext context)
{
// 在结果执行之前调用的一系列操作
}
}
public class LogInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
try
{
invocation.Proceed();
Dapper.Logger.LogHelper.logger.Info(invocation.Method.Name);
}
catch (Exception ex)
{
Dapper.Logger.LogHelper.logger.Error(invocation.Method.Name + " " + ex.ToString());
}
}
}
public class MyInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
try
{
invocation.Proceed();
NLogHelper.logger.Info(invocation.Method.Name);
}
catch (Exception ex)
{
NLogHelper.logger.Error(invocation.Method.Name + " " + ex.ToString());
}
}
}
public void ConfigureContainer(ContainerBuilder builder)
{
//builder.RegisterType
文章标题:.net core 3.1 过滤器(Filter) 和AOP面向切面拦截器
文章链接:http://soscw.com/index.php/essay/43043.html