重新拾取:ASP.NET Core WebApi 使用Swagger支持授权认证
园子里已经有很多.NET Core 集成Swagger的文章,但对于使用授权的介绍蛮少的。
public static class SwaggerServiceExtensions
{
public static IServiceCollection AddSwaggerCustom(this IServiceCollection services, IConfiguration configuration)
{
//注册SwaggerAPI文档服务
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new Info
{
Title = configuration["GlobalSettings:ProjectName"],
Version = "v1",
});
options.AddSecurityDefinition("Bearer", new ApiKeyScheme
{
Description = "请输入带有Bearer的Token",
Name = "Authorization",
In = "header",
Type = "apiKey"
});
//Json Token认证方式,此方式为全局添加
options.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>>
{
{ "Bearer", Enumerable.Empty<string>() }
});
//获取应用程序根目录路径,官方写法
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
//linux环境下获取路径没有问题
//var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
//使用更简洁的AppContext.BaseDirectory、linux下也没问题
//var basePath = AppContext.BaseDirectory;
//设置Swagger注释 需要 右键项目 -> 生成 -> 输出 -> 勾选XML文档文件 才会产生XML文件
var xmlPath = Path.Combine(basePath, "SexyBook.ClientApi.xml");
if (System.IO.File.Exists(xmlPath))
options.IncludeXmlComments(xmlPath);
}); return services;
} public static IApplicationBuilder UseSwaggerCustom(this IApplicationBuilder builder, IConfiguration configuration)
{
//启用Swagger
builder.UseSwagger();
//启用SwaggerUI
builder.UseSwaggerUI(options =>
{
//文档终结点
options.SwaggerEndpoint("/swagger/v1/swagger.json", $"{configuration["GlobalSettings:ProjectName"]} API V1");
//文档标题
options.DocumentTitle = configuration["GlobalSettings:ProjectName"];
//页面API文档格式 Full=全部展开, List=只展开列表, None=都不展开
options.DocExpansion(DocExpansion.List);
});
return builder;
}
}
此方式乃全局应用,每个接口服务都能直接应用上Token,当然如果你不喜欢可以选择 实现IOperationFilter接口
public class SwaggerOperationFilter : IOperationFilter
{
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
{
operation.Parameters = operation.Parameters ?? new List<IParameter>();
var info = context.MethodInfo;
context.ApiDescription.TryGetMethodInfo(out info);
try
{
Attribute attribute = info.GetCustomAttribute(typeof(AuthorizeAttribute));
if (attribute != null)
{
operation.Parameters.Add(new BodyParameter
{
Name = "Authorization",
@In = "header",
Description = "access_token",
Required = true
});
} }
catch
{ }
} }
接下来调用 options.OperationFilter<SwaggerOperationFilter>(); 就好啦
public static class SwaggerServiceExtensions
{
public static IServiceCollection AddSwaggerCustom(this IServiceCollection services, IConfiguration configuration)
{
//注册SwaggerAPI文档服务
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new Info
{
Title = configuration["GlobalSettings:ProjectName"],
Version = "v1",
});
//使用过滤器单独对某些API接口实施认证
options.OperationFilter<SwaggerOperationFilter>(); //获取应用程序根目录路径,官方写法
var basePath = PlatformServices.Default.Application.ApplicationBasePath;//设置Swagger注释 需要 右键项目 -> 生成 -> 输出 -> 勾选XML文档文件 才会产生XML文件
var xmlPath = Path.Combine(basePath, "SexyBook.ClientApi.xml");
if (System.IO.File.Exists(xmlPath))
options.IncludeXmlComments(xmlPath);
}); return services;
} public static IApplicationBuilder UseSwaggerCustom(this IApplicationBuilder builder, IConfiguration configuration)
{
//启用Swagger
builder.UseSwagger();
//启用SwaggerUI
builder.UseSwaggerUI(options =>
{
//文档终结点
options.SwaggerEndpoint("/swagger/v1/swagger.json", $"{configuration["GlobalSettings:ProjectName"]} API V1");
//文档标题
options.DocumentTitle = configuration["GlobalSettings:ProjectName"];
//页面API文档格式 Full=全部展开, List=只展开列表, None=都不展开
options.DocExpansion(DocExpansion.List);
});
return builder;
}
}
参考文章
https://ppolyzos.com/2017/10/30/add-jwt-bearer-authorization-to-swagger-and-asp-net-core/
http://www.cnblogs.com/NuoYer/p/8252023.html
https://www.cnblogs.com/yilezhu/p/9241261.html
https://www.cnblogs.com/yanbigfeg/p/9232844.html
https://github.com/domaindrivendev/Swashbuckle.AspNetCore
重新拾取:ASP.NET Core WebApi 使用Swagger支持授权认证的更多相关文章
- ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...
- ASP.NET Core WebApi使用Swagger生成api
引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...
- ASP.NET Core WebApi使用Swagger生成api说明文档
1. Swagger是什么? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件 ...
- 【转】ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
原文链接:https://www.cnblogs.com/yilezhu/p/9241261.html 引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必 ...
- Asp.net Core WebApi 使用Swagger做帮助文档,并且自定义Swagger的UI
WebApi写好之后,在线帮助文档以及能够在线调试的工具是专业化的表现,而Swagger毫无疑问是做Docs的最佳工具,自动生成每个Controller的接口说明,自动将参数解析成json,并且能够在 ...
- Asp.net core WebApi 使用Swagger生成帮助页
最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效 ...
- Asp.net core WebApi 使用Swagger生成帮助页实例
最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效 ...
- ASP.NET Core WebApi使用Swagger生成API说明文档【xml注释版】
⒈新建ASP.NET Core WebAPi项目 ⒉添加 NuGet 包 Install-Package Swashbuckle.AspNetCore ⒊Startup中配置 using System ...
- ASP.NET Core WebApi使用Swagger生成API说明文档【特性版】
⒈新建ASP.NET Core WebAPi项目 ⒉添加 NuGet 包 Install-Package Swashbuckle.AspNetCore ⒊Startup中配置 using System ...
随机推荐
- [LeetCode] Decode Ways 解码方法个数、动态规划
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- 查看本机外网ip地址
DOS下是无法查看外网IP的,只能获取本机内网IP地址 外网IP只能通过专门的测IP网站 http://www.ip138.com/ip2city.asp
- VueJS渐进式JS框架中文学习
官方网站:http://vuejs.org/ GitHub:https://github.com/vuejs/vue 中文学习地址:https://cn.vuejs.org/
- U盘EFI分区删不掉怎么办
方法/步骤 将U盘查到电脑上 点击[开始]找到并打开[Windows系统]的下拉按钮,找到[命令提示符] 在“命令提示符”上右键>[更多]>[以管理员身份运行]打开“管理员:命令提示符”窗 ...
- 详细解析用Squid实现反向代理的方法
代理服务器是使 用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,使内部网主机免受 外部网主机的攻击.但是,如果想让互联网 ...
- hibernate出现 org.hibernate.PropertyNotFoundException: field [departmen] not found on cn.itcast.hibernate.domain.Employee1错误
hibernate出现 org.hibernate.PropertyNotFoundException: field [departmen] not found on cn.itcast.hibern ...
- linux SPI驱动——spidev之deive(五)
1.定义board设备 1: struct spi_board_info { 2: /* the device name and module name are coupled, like platf ...
- 在PHP中,通过filesize函数可以取得文件的大小,文件大小是以字节数表示的。如果要转换文件大小的单位,可以自己定义函数来实现。
<?php function getsize($size, $format) { $p = 0; if ($format == 'kb') { $p = 1; } elseif ($format ...
- 必会必知git
git必会必知 1 前言 git前身是BitKeeper,但是他不是开源软件,不符合当时开源趋势,于是就会有了开源的git,git开发只用了十天时间.目前git是公司开发必不可少的一个工具,用于多 ...
- Web网页开发常见经典问题
1.网络请求参数共享 转发dispatcher和重定向redirect 对于参数共享的区别 Redirect和Dispatcher 区别