Net Core WebApi自定义拦截特性简单实现
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自定义拦截特性简单实现相关推荐
- ASP.NET Core WebAPI帮助页--Swagger简单使用1.0
1.什么是Swagger? Swagger是一个规范且完整的框架,提供描述.生产.消费和可视化RESTful API,它是为了解决Web API生成有用文档和帮助页的问题. 2.为啥选用swagger ...
- asp.net core 系列之webapi集成EFCore的简单操作教程
因为官网asp.net core webapi教程部分,给出的是使用内存中的数据即 UseInMemoryDatabase 的方式, 这里记录一下,使用SQL Server数据库的方式即 UseSql ...
- ASP.NET Core WebAPI中使用JWT Bearer认证和授权
为什么是 JWT Bearer ASP.NET Core 在 Microsoft.AspNetCore.Authentication 下实现了一系列认证, 包含 Cookie, JwtBearer, ...
- 【Dnc.Api.Throttle】适用于.Net Core WebApi接口限流框架
Dnc.Api.Throttle 适用于Dot Net Core的WebApi接口限流框架 使用Dnc.Api.Throttle可以使您轻松实现WebApi接口的限流管理.Dnc.Api.Thr ...
- ASP.Net Core WebApi几种版本控制对比
ASP.Net Core WebApi几种版本控制对比 原文:ASP.Net Core WebApi几种版本控制对比 一.版本控制的好处: (1)有助于及时推出功能, 而不会破坏现有系统. (2)它还 ...
- dotNET Core WebAPI 统一处理(返回值、参数验证、异常)
现在 Web 开发比较流行前后端分离 现在 Web 开发比较流行前后端分离,我们的产品也是一样,前端使用Vue,后端使用 dotNet Core WebAPI ,在写 API 的过程中有很多地方需要统 ...
- SpringMVC自定义拦截器与异常处理(自定义异常)
SpringMVC自定义拦截器与异常处理 拦截器概念 拦截器代码演示 创建maven工程 pom.xml <?xml version="1.0" encoding=" ...
- ASP.NET CORE WEBAPI文件下载
最近要使用ASP.NET CORE WEBAPI用来下载文件,使用的.NET CORE 3.1.考虑如下场景: 文件是程序生成的. 文件应该能兼容各种格式. 浏览器可以感知进行下载. 准备 经过简单的 ...
- .net core webapi 前后端开发分离后的配置和部署
背景:现在越来越多的企业都采用了在开发上前后端分离,前后端开发上的分离有很多种,那么今天,我来分享一下项目中得的前后端分离. B/S Saas 项目:(这个项目可以理解成个人中心,当然不止这么点功能 ...
最新文章
- android h5状态栏消息,安卓实现系统状态栏的隐藏和显示
- 如何编写与非贪婪匹配的正则表达式? [重复]
- vector 指针 的指针
- C++中getline函数的使用
- 测验5: 函数和代码复用 (第5周)
- Unity3D插件 Puppet3D的使用
- 接口测试用例设计方法——接口测试用例思路梳理
- 使用 Vue.js 全家桶开发的高颜值第三方网易云播放器
- Maven 配置阿里云镜像
- C++ stander library--type traits and type utility
- 在虚拟机中安装雨林木风XP镜像的正确步骤
- 使用HTML+CSS+JS做一个音乐播放器
- 捋一捋Python的文件处理(上)
- 免杀实战之面向PHP的WebShell免杀
- 万豪国际集团全新人才品牌“Be”将于全球超8300家酒店上线 | 美通社头条
- 成都精灵云-C++开发工程师-技术面经(30min左右)
- 面试说等通知是不是就凉了?
- 生鲜冷链冻品零售企业订货管理系统解决方案
- mysql 验证用户名重复,Ajax案例——检验用户名是否重复
- RIA 阅读法 是什么