NET8.0如何添加过滤器 怎么添加全局过滤器

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>();
});一行代码解决全局过滤器。
















