NET8.0如何添加过滤器 怎么添加全局过滤器, netcore中过滤器的使用
一、 .net8如何添加过滤器
新建一个过滤器 MyAuthorizeAttribute.cs使其继承于Attribute, IAuthorizationFilter, 以下内容写入其中
/// <summary> /// 自定义授权过滤器 /// </summary> public class MyAuthorizeAttribute : Attribute, IAuthorizationFilter { /// <summary> /// OnAuthorization /// </summary> /// <param name="context"></param> /// <exception cref="NotImplementedException"></exception> public void OnAuthorization(AuthorizationFilterContext context) { if (HasAllowAnonymous(context)) { return; } //如果没有登录时,给出友好提示 if (!context.HttpContext.User.Identity!.IsAuthenticated) { context.Result = new JsonResult(MyResults.FailResult("请登录!")); } } // 判断是否含有IAllowAnonymous ,因为不是所有的控制器都需要授权,比如登录页面就不用再授权 private bool HasAllowAnonymous(AuthorizationFilterContext context) { if (context.Filters.Any(filter => filter is IAllowAnonymousFilter)) { return true; } var endpoint = context.HttpContext.GetEndpoint(); return endpoint?.Metadata.GetMetadata<IAllowAnonymous>() != null; } }
然后在每个需要添加授权的控制器上面如下形式的标注
[AllowAnonymous] public class HomeController : Controller { public IActionResult Login(string username,string password) { ........你的代码 return View(); } }
该控制器就不会再进行认证和授权的流程了,直接可以访问。但是每个控制器都要这样添加,就比较麻烦了,使用全局过滤器可以解决这个问题。
二、 怎么添加全局过滤器
打开Program.cs , 找到 builder.Services.AddControllers,进行修改
builder.Services.AddControllers(p => { //添加全局过滤器 p.Filters.Add<MyAuthorizeAttribute>(); });
一行代码解决全局过滤器。