You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
4.3 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.IO;
using DS.WMS.PrintApi.Utils;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.Filters;
namespace DS.WMS.PrintApi
{
/// <summary>
/// Swagger 启动服务
/// </summary>
public static class SwaggerSetup
{
public static IServiceCollection AddSwaggerSetup(this IServiceCollection services)
{
if (services == null) throw new ArgumentNullException(nameof(services));
string url = AppSetting.Configuration["SwaggerDoc:ContactUrl"];
//if (string.IsNullOrEmpty(url))
//{
// throw new OsharpException("配置文件中Swagger节点的Url不能为空");
//}
var basePath = AppContext.BaseDirectory;
services.AddMvcCore().AddApiExplorer();
services.AddSwaggerGen(options =>
{
string contactName = AppSetting.Configuration["SwaggerDoc:ContactName"];
string contactNameEmail = AppSetting.Configuration["SwaggerDoc:ContactEmail"];
string contactUrl = AppSetting.Configuration["SwaggerDoc:ContactUrl"];
options.SwaggerDoc("v1", new OpenApiInfo
{
Version = AppSetting.Configuration["SwaggerDoc:Version"],
Title = AppSetting.Configuration["SwaggerDoc:Title"],
Description = AppSetting.Configuration["SwaggerDoc:Description"],
Contact = new OpenApiContact
{ Name = contactName, Email = contactNameEmail, Url = new Uri(contactUrl) },
License = new OpenApiLicense { Name = contactName, Url = new Uri(contactUrl) }
});
try
{
//就是这里
var xmlPath = Path.Combine(basePath, "Api.xml"); //这个就是刚刚配置的xml文件名
options.IncludeXmlComments(xmlPath, true); //默认的第二个参数是false这个是controller的注释记得修改
//var xmlModelPath = Path.Combine(basePath, "Data.xml");//这个就是Model层的xml文件名
//options.IncludeXmlComments(xmlModelPath);
}
catch (Exception ex)
{
throw new Exception("Api.xml丢失请检查并拷贝。\n" + ex.Message);
}
// 开启加权小锁
//options.OperationFilter<AddHeaderOperationFilter>("correlationId", "Correlation Id for the request", false); // adds any string you like to the request headers - in this case, a correlation id
options.OperationFilter<AddResponseHeadersFilter>();
options.OperationFilter<AppendAuthorizeToSummaryOperationFilter>();
// 在header中添加token传递到后台
options.OperationFilter<SecurityRequirementsOperationFilter>();
// 必须是 Bearer
options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
Description = "JWT授权(数据将在请求头中进行传输) 直接在下框中输入Bearer {token}(注意两者之间是一个空格)\"",
Name = "Authorization", //jwt默认的参数名称
In = ParameterLocation.Header, //jwt默认存放Authorization信息的位置(请求头中)
Type = SecuritySchemeType.ApiKey,
// BearerFormat = "JWT", //标识承载令牌的格式 该信息主要是出于文档目的
Scheme = "Bearer" //授权中要使用的HTTP授权方案的名称
});
//在Heder中添加Token 传递到后台
options.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "oauth2"
}
},
new string[] { }
}
});
});
return services;
}
}
}