应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.net core swagger 添加header参数。swagger传递jwt token

12126人阅读 2022/6/13 0:01 总访问:5179591 评论:0 收藏:0 手机
分类: .NET Core

.net core swagger 添加header参数

方法一:使用FromHeader

  1. [HttpGet]
  2. public ReturnModel<UserInfoModel> Get([FromHeader(Name = "userNr")][Required] string userNr)
  3. {
  4. string val = Request.Headers["userNr"];
  5. ReturnModel<UserInfoModel> returnModel = new ReturnModel<UserInfoModel>();
  6. return returnModel;
  7. }

这种就给单个方法加想要获取的header参数


要注意不要使用这类方法写含有特殊意义的header参数,比如Authorization这种

  1. [HttpGet]
  2. public ReturnModel<UserInfoModel> Get([FromHeader(Name = "Authorization")][Required] string authorization)
  3. {
  4. string token = Request.Headers["Authorization"];
  5. ReturnModel<UserInfoModel> returnModel = new ReturnModel<UserInfoModel>();
  6. return returnModel;
  7. }

如果写成这种swagger会把他忽略掉,你参数是传递不过去的,会报错:


即时你确实对参数进行了传递还是会报错:

因为Authorization在swagger中是有特殊函数的,需要单独使用,后面会说到。当然这种只是swagger传递不了,你用postman或者前端调用其实也是可以传递的

方法二:重写IOperationFilter实现

  1. public class AddRequiredHeaderParameter : IOperationFilter
  2. {
  3. public void Apply(OpenApiOperation operation, OperationFilterContext context)
  4. {
  5. if (operation.Parameters == null)
  6. operation.Parameters = new List<OpenApiParameter>();
  7. operation.Parameters.Add(new OpenApiParameter()
  8. {
  9. Name = "userNr",
  10. In = ParameterLocation.Header,
  11. Required = true
  12. });
  13. operation.Parameters.Add(new OpenApiParameter()
  14. {
  15. Name = "periodNo",
  16. In = ParameterLocation.Header,
  17. Required = true
  18. });
  19. }
  20. }

然后在AddSwaggerGen中添加即可

这样所有接口中都有这两个header参数了


当然这种方式也不要去添加有特殊函数的header参数会被忽略掉。鼠标指到name上面也有说明的。

这种方式其实也比较灵活比如配合AllowAnonymous等等特性使用,还可以配置一些模式什么的

  1. public class AddRequiredHeaderParameter : IOperationFilter
  2. {
  3. public void Apply(OpenApiOperation operation, OperationFilterContext context)
  4. {
  5. var filterPipeline = context.ApiDescription.ActionDescriptor.FilterDescriptors;
  6. var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is AuthorizeFilter);
  7. var allowAnonymous = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is IAllowAnonymousFilter);
  8. if (isAuthorized && !allowAnonymous)
  9. {
  10. if (operation.Parameters == null)
  11. operation.Parameters = new List<OpenApiParameter>();
  12. operation.Parameters.Add(new OpenApiParameter
  13. {
  14. Name = "name",
  15. In = ParameterLocation.Header,
  16. Description = "我是参数备注",
  17. Required = true,
  18. Schema = new OpenApiSchema
  19. {
  20. Type = "string",
  21. Default = new OpenApiString("Bearer ")
  22. }
  23. });
  24. }
  25. }
  26. }

swagger传递jwt token

swagger传递jwt token其实就是一种特殊的header类型,就是前面提到的,Authorization,它是有特殊的设置方法的。
也是在context.Services.AddSwaggerGen中设置

  1. var security = new Dictionary<string, IEnumerable<string>> { { "Bearer", new string[] { } } };
  2. c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
  3. {
  4. Description = "JWT授权(数据将在请求头中进行传输) 在下方输入Bearer {token} 即可,注意两者之间有空格",
  5. Name = "Authorization", //jwt默认的参数名称
  6. In = ParameterLocation.Header, //jwt默认存放Authorization信息的位置(请求头中)
  7. Type = SecuritySchemeType.ApiKey,
  8. });
  9. c.AddSecurityRequirement(new OpenApiSecurityRequirement
  10. {
  11. {
  12. new OpenApiSecurityScheme
  13. {
  14. Reference = new OpenApiReference()
  15. {
  16. Id = "Bearer",
  17. Type = ReferenceType.SecurityScheme
  18. }
  19. },
  20. Array.Empty<string>()
  21. }
  22. });

设置了之后就可以看到有锁的标识:

在最上面那个锁的标识位置点击,就可以看到弹窗,然后你可以设置一个值,点击Authorize

锁的样式就变成关闭的状态了:


此时你随便调试一个接口,就可以把你填写的内容传递到后台去了。其实就是方便测试而已。


其他相关应用贴一下:
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。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

类型“DbSet”在未引用的程序集中定义。必须添加对程序集“EntityFramework Version=5.0.0.0 Culture=neutral PublicKeyToken=b7

在用mvc+ef的时候在DAL层引用上下文信息的时候会报出下面错误其实就是没得EntityFromwork,打开vs项目,点击工具,选择NuGe...

动态生成表格批量添加再使用ajax提交后台

&lt;!DOCTYPE html&gt;&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;head&gt; &lt;meta http-equiv=&...

百度编辑器添加事件

添加点击与失去焦点事件://添加点击事件 ue.addListener(&quot;click&quot;,function(){ alert(&quot;点击&quot;); }) ...

Layui Select添加选择事件Layui 下拉列表

html&lt;selectname=&quot;label&quot;id=&quot;atype&quot;lay-filter=&quot;atype&quot;&gt; &lt;optionvalue=&quot;a&q...

解决VS2017添加引用失败问题

VS2017添加引用失败 ,报错:找不到 Microsoft.VisualStudio.Shell.Interop.IVsReferenceManager 服务的实例一:打开vs2017...

ef6动态添加条件

例如我们要匹配一个集合中的所有关键字,我们首先想到的做法是这样的publicList&lt;Article&gt;GetArtByKeys(List&lt;strin...

Sqlerver添加用户与授权

添加用户安全性--&gt;登录名,然后右键新建登录名就可以了然后填写好相关信息就可以了右键属性,用户映射可以选择该用户可...

C ADO.net基本添加操作

C# ADO.NET基本添加操作publicboolRegister(UserInfoui) { using(SqlConnectionconn=newSqlConnection(&quot;server=.;ui...

解决xml添加新元素问题

最近遇到一个xml在末尾添加节点报错问题,如下图!网上搜了一下解决方式如下

jQuery—为动态添加的元素绑定事件

我们在使用jQuery的时候总会遇到形形色色的问题在jQuery的元素绑定事件中,我通常使用click来绑定单击事件,但是这个只能绑...

添加缓存区提升计算机的读写性能

哈喽,大家好,我是刘小贱。今天呢,刘小贱给大家分享一款运行在windoes系统上的神器软件,软件名:PrimoCache这款软件呢是通...

七牛云添加对象存储

上一篇我们是注册然后第一次使用七牛云的cdn,添加成功一次后我们可以在添加一个点击对象存储然后点击新建存储空间然后添加...

将程序集添加到缓存失败: 系统找不到指定的文件。vs2017添加引用失败

vs2017添加引用失败。将程序集添加到缓存失败: 系统找不到指定的文件这个是因为缺少相应的dll,也就是microsoft.visualstud...

VS2017 .net core web项目 添加引用 报错

VS2017 .net core web项目 添加引用 报错 vs2017添加引用时报错未能正确加载“ReferenceManagerPackage”包第一步:找到以...