TNBLOG
首页
博客
视频
资源
问答
猿趣
手机
关于
搜索
收藏
便签
笔记
消息
创作
登录
剑轩
故如虹,知恩;故如月,知明
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
CSS
15篇
微服务
41篇
Git
14篇
.NET
102篇
移动开发
33篇
软件架构
23篇
.NET Core
119篇
.NET MVC
11篇
英语
3篇
随笔
86篇
Bootstrap
3篇
Redis
21篇
编辑器
10篇
Js相关
15篇
虚拟化
8篇
更多
Oracle
7篇
Python
14篇
数据库
26篇
EF
17篇
微信
3篇
前端
151篇
消息队列
6篇
docker
41篇
多线程
1篇
Java
4篇
软件基础
2篇
C++
2篇
WCF
7篇
Linux
7篇
nginx
5篇
K8S
9篇
ABP
2篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术
原
.net core swagger 添加header参数。swagger传递jwt token
9070
人阅读
2022/6/13 0:01
总访问:
3944823
评论:
0
收藏:
0
手机
分类:
.NET Core
## .net core swagger 添加header参数 ### 方法一:使用FromHeader ``` [HttpGet] public ReturnModel<UserInfoModel> Get([FromHeader(Name = "userNr")][Required] string userNr) { string val = Request.Headers["userNr"]; ReturnModel<UserInfoModel> returnModel = new ReturnModel<UserInfoModel>(); return returnModel; } ``` 这种就给单个方法加想要获取的header参数 tn2>要注意不要使用这类方法写含有特殊意义的header参数,比如Authorization这种 ``` [HttpGet] public ReturnModel<UserInfoModel> Get([FromHeader(Name = "Authorization")][Required] string authorization) { string token = Request.Headers["Authorization"]; ReturnModel<UserInfoModel> returnModel = new ReturnModel<UserInfoModel>(); return returnModel; } ``` 如果写成这种swagger会把他忽略掉,你参数是传递不过去的,会报错: ![](https://img.tnblog.net/arcimg/aojiancc2/d41034a511d645cea5b7462b0c31ce23.png) 即时你确实对参数进行了传递还是会报错: ![](https://img.tnblog.net/arcimg/aojiancc2/dd55594ff61048b0a188b384e42f0ab5.png) 因为Authorization在swagger中是有特殊函数的,需要单独使用,后面会说到。当然这种只是swagger传递不了,你用postman或者前端调用其实也是可以传递的 ### 方法二:重写IOperationFilter实现 ``` public class AddRequiredHeaderParameter : IOperationFilter { public void Apply(OpenApiOperation operation, OperationFilterContext context) { if (operation.Parameters == null) operation.Parameters = new List<OpenApiParameter>(); operation.Parameters.Add(new OpenApiParameter() { Name = "userNr", In = ParameterLocation.Header, Required = true }); operation.Parameters.Add(new OpenApiParameter() { Name = "periodNo", In = ParameterLocation.Header, Required = true }); } } ``` 然后在AddSwaggerGen中添加即可 ![](https://img.tnblog.net/arcimg/aojiancc2/ac5ac42c21f14e87bb1730cd5c33c365.png) 这样所有接口中都有这两个header参数了 ![](https://img.tnblog.net/arcimg/aojiancc2/f6aa7e2096fe42e18289939002e15766.png) tn2>当然这种方式也不要去添加有特殊函数的header参数会被忽略掉。鼠标指到name上面也有说明的。 ![](https://img.tnblog.net/arcimg/aojiancc2/f9a110dec76b402c8541bf8fa751c8b7.png) 这种方式其实也比较灵活比如配合AllowAnonymous等等特性使用,还可以配置一些模式什么的 ``` public class AddRequiredHeaderParameter : IOperationFilter { public void Apply(OpenApiOperation operation, OperationFilterContext context) { var filterPipeline = context.ApiDescription.ActionDescriptor.FilterDescriptors; var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is AuthorizeFilter); var allowAnonymous = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is IAllowAnonymousFilter); if (isAuthorized && !allowAnonymous) { if (operation.Parameters == null) operation.Parameters = new List<OpenApiParameter>(); operation.Parameters.Add(new OpenApiParameter { Name = "name", In = ParameterLocation.Header, Description = "我是参数备注", Required = true, Schema = new OpenApiSchema { Type = "string", Default = new OpenApiString("Bearer ") } }); } } } ``` ## swagger传递jwt token swagger传递jwt token其实就是一种特殊的header类型,就是前面提到的,Authorization,它是有特殊的设置方法的。 也是在context.Services.AddSwaggerGen中设置 ``` var security = new Dictionary<string, IEnumerable<string>> { { "Bearer", new string[] { } } }; c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme() { Description = "JWT授权(数据将在请求头中进行传输) 在下方输入Bearer {token} 即可,注意两者之间有空格", Name = "Authorization", //jwt默认的参数名称 In = ParameterLocation.Header, //jwt默认存放Authorization信息的位置(请求头中) Type = SecuritySchemeType.ApiKey, }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference() { Id = "Bearer", Type = ReferenceType.SecurityScheme } }, Array.Empty<string>() } }); ``` **设置了之后就可以看到有锁的标识:** ![](https://img.tnblog.net/arcimg/aojiancc2/3ae59fde4c2744d3a49ef64be70d374a.png) 在最上面那个锁的标识位置点击,就可以看到弹窗,然后你可以设置一个值,点击Authorize ![](https://img.tnblog.net/arcimg/aojiancc2/acc8331afe4b429a90229fb7bf51dbce.png) 锁的样式就变成关闭的状态了: ![](https://img.tnblog.net/arcimg/aojiancc2/cdfc342e395e4d7fa24bce96c07b1c50.png) tn2>此时你随便调试一个接口,就可以把你填写的内容传递到后台去了。其实就是方便测试而已。 tn3> 其他相关应用贴一下: jwt的使用: https://www.tnblog.net/aojiancc2/article/details/2815 swagger版本控制: https://www.tnblog.net/aojiancc2/article/details/5951 webapi post传递参数:https://www.tnblog.net/aojiancc2/article/details/2815
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}