Loading...

学习和积累有关asp.net, .net core, asp.net core的知识,在编程中找寻乐趣!

当前位置:首页DotNet

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

发布时间:2024-08-04 11:04
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>();
});

一行代码解决全局过滤器。

Net8添加全局异常过滤器

新建一个帮助类, ExceptionFilterAttribute.cs , 使其继承于属性和异常接口,Attribute, IExcept

提供免费的服务器维护、网站维护、宝塔面板的安装及运行。

网站编写代码分享

网站收录效果不好,自然会影响排名,网站优化首先第一步是要搞好网站收录

网络营销