Net Core 自定义拦截器

  • 前言
  • 代码展示
  • 注意事项

前言

WebApi拦截器自定义授权处理, 针对Net Core WebApi项目

代码展示

    /// <summary>/// 自定义特性处理  需要使用的话对应的方法添加特性/// </summary>public class AuthorizeRequestAttribute : TypeFilterAttribute{#region 字段/// <summary>/// 是否忽略过滤器/// </summary>private readonly bool _ignoreFilter;#endregion#region 构造函数/// <summary>/// 构造函数/// </summary>/// <param name="ignore">是否忽略过滤。默认为false</param>public AuthorizeRequestAttribute(bool ignore = false) : base(typeof(AuthorizeFilter)){this._ignoreFilter = ignore;this.Arguments = new object[] { ignore };}#endregion#region 属性/// <summary>/// 获取是否忽略过滤?/// </summary>public bool IgnoreFilter => _ignoreFilter;#endregion#region 内部过滤器/// <summary>/// 管理员授权过滤器/// </summary>private class AuthorizeFilter : IAuthorizationFilter{#region 字段//是否忽略过滤器private readonly bool _ignoreFilter;#endregion#region 构造函数//过滤器声明public AuthorizeFilter(bool ignoreFilter  ){this._ignoreFilter = ignoreFilter;}#endregion#region 方法/// <summary>/// 验证过滤器信息/// </summary>/// <param name="filterContext"></param>public void OnAuthorization(AuthorizationFilterContext filterContext){if (filterContext == null)throw new ArgumentNullException(nameof(filterContext));//检查是否已经被 Action 方法重写了var actionFilter = filterContext.ActionDescriptor.FilterDescriptors.Where(filterDescriptor => filterDescriptor.Scope == FilterScope.Action).Select(filterDescriptor => filterDescriptor.Filter).OfType<AuthorizeRequestAttribute>().FirstOrDefault();//没有特性不处理,忽略也不处理if (actionFilter?.IgnoreFilter ?? _ignoreFilter)return;if (filterContext.Filters.Any(filter => filter is AuthorizeFilter)){//下面是访问自定义的服务,获取当前登录用户是否有权限访问var authorzation = filterContext.HttpContext.Request.Headers["Authorization"];//验证token不为空的情况下进行   赋值处理if (!string.IsNullOrWhiteSpace(authorzation)){int remainTime = 0;//解析对应的Tokenvar info = JWTHelper.CheckToken(authorzation.ToString(), out remainTime);if (info == null){//验证失败  进行拦截处理    为空处理ApiResult apiResult = new ApiResult() { code = 0, msg = "非法请求,AccessToken异常" };filterContext.HttpContext.Response.ContentType = "application/json";filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;filterContext.Result = new JsonResult(apiResult);}else{UserContext.AccountId = info.accountId;UserContext.UserName = info.accountId;UserContext.UserTrueName = DateTime.Now.ToString();UserContext.Token = authorzation;return;}}else {//有添加对应的特性要求 需要拦截处理ApiResult apiResult = new ApiResult() { code = 0, msg = "非法请求" };filterContext.HttpContext.Response.ContentType = "application/json";filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;filterContext.Result = new JsonResult(apiResult);}}}#endregion}#endregion}

注意事项

需要进行startup.cs进行补充

         //添加对应的拦截器信息services.AddMvc(options =>{//添加拦截器options.Filters.Add<AuthorizeRequestAttribute>(); });

如何使用

 /// <summary>/// 撤回审批接口/// </summary>/// <param name="req"></param>/// <returns></returns>[HttpPost][AuthorizeRequestAttribute]  //不忽略public async Task<WebApiResult<WithdrawFormRsp>> WithdrawForm([FromBody] WebApiRequest<WithdrawFormReq> req){var rsp = new WebApiResult<WithdrawFormRsp>();rsp.msg = "处理结果信息";return rsp;}/// <summary>/// 修改记录接口/// </summary>/// <param name="req"></param>/// <returns></returns>[HttpPost][AuthorizeRequestAttribute(true)]  //忽略public async Task<WebApiResult<List<EditRecordRsp>>> EditRecord([FromBody] WebApiRequest<WithdrawFormReq> req){var rsp = new WebApiResult<List<EditRecordRsp>>();rsp.msg = "处理结果信息";return rsp;}

Net Core WebApi自定义拦截特性简单实现相关推荐

  1. ASP.NET Core WebAPI帮助页--Swagger简单使用1.0

    1.什么是Swagger? Swagger是一个规范且完整的框架,提供描述.生产.消费和可视化RESTful API,它是为了解决Web API生成有用文档和帮助页的问题. 2.为啥选用swagger ...

  2. asp.net core 系列之webapi集成EFCore的简单操作教程

    因为官网asp.net core webapi教程部分,给出的是使用内存中的数据即 UseInMemoryDatabase 的方式, 这里记录一下,使用SQL Server数据库的方式即 UseSql ...

  3. ASP.NET Core WebAPI中使用JWT Bearer认证和授权

    为什么是 JWT Bearer ASP.NET Core 在 Microsoft.AspNetCore.Authentication 下实现了一系列认证, 包含 Cookie, JwtBearer,  ...

  4. 【Dnc.Api.Throttle】适用于.Net Core WebApi接口限流框架

    Dnc.Api.Throttle    适用于Dot Net Core的WebApi接口限流框架 使用Dnc.Api.Throttle可以使您轻松实现WebApi接口的限流管理.Dnc.Api.Thr ...

  5. ASP.Net Core WebApi几种版本控制对比

    ASP.Net Core WebApi几种版本控制对比 原文:ASP.Net Core WebApi几种版本控制对比 一.版本控制的好处: (1)有助于及时推出功能, 而不会破坏现有系统. (2)它还 ...

  6. dotNET Core WebAPI 统一处理(返回值、参数验证、异常)

    现在 Web 开发比较流行前后端分离 现在 Web 开发比较流行前后端分离,我们的产品也是一样,前端使用Vue,后端使用 dotNet Core WebAPI ,在写 API 的过程中有很多地方需要统 ...

  7. SpringMVC自定义拦截器与异常处理(自定义异常)

    SpringMVC自定义拦截器与异常处理 拦截器概念 拦截器代码演示 创建maven工程 pom.xml <?xml version="1.0" encoding=" ...

  8. ASP.NET CORE WEBAPI文件下载

    最近要使用ASP.NET CORE WEBAPI用来下载文件,使用的.NET CORE 3.1.考虑如下场景: 文件是程序生成的. 文件应该能兼容各种格式. 浏览器可以感知进行下载. 准备 经过简单的 ...

  9. .net core webapi 前后端开发分离后的配置和部署

    背景:现在越来越多的企业都采用了在开发上前后端分离,前后端开发上的分离有很多种,那么今天,我来分享一下项目中得的前后端分离. B/S  Saas 项目:(这个项目可以理解成个人中心,当然不止这么点功能 ...

最新文章

  1. android h5状态栏消息,安卓实现系统状态栏的隐藏和显示
  2. 如何编写与非贪婪匹配的正则表达式? [重复]
  3. vector 指针 的指针
  4. C++中getline函数的使用
  5. 测验5: 函数和代码复用 (第5周)
  6. Unity3D插件 Puppet3D的使用
  7. 接口测试用例设计方法——接口测试用例思路梳理
  8. 使用 Vue.js 全家桶开发的高颜值第三方网易云播放器
  9. Maven 配置阿里云镜像
  10. C++ stander library--type traits and type utility
  11. 在虚拟机中安装雨林木风XP镜像的正确步骤
  12. 使用HTML+CSS+JS做一个音乐播放器
  13. 捋一捋Python的文件处理(上)
  14. 免杀实战之面向PHP的WebShell免杀
  15. 万豪国际集团全新人才品牌“Be”将于全球超8300家酒店上线 | 美通社头条
  16. 成都精灵云-C++开发工程师-技术面经(30min左右)
  17. 面试说等通知是不是就凉了?
  18. 生鲜冷链冻品零售企业订货管理系统解决方案
  19. mysql 验证用户名重复,Ajax案例——检验用户名是否重复
  20. RIA 阅读法 是什么

热门文章

  1. airpods pro是按压还是触摸_苹果三代耳机是触摸还是按键
  2. 淘宝神话-one piece 般的十年
  3. DSC曲线峰面积的确定及仪器校正
  4. 罗克韦尔ABSourceKeyTools工具制作
  5. 海光国产CPU芯片和服务器,海光CPU芯片 一文看懂国产CPU!“造不如买”时代终
  6. C语言——日期转换为天数
  7. 半导体2013风云榜 美光大跃进
  8. Unity2D横版游戏地形生成
  9. 基于高通410c开发板,开发android端家庭控制中心APP(1)
  10. LM在speech recognition中的应用