72 lines
3.2 KiB
C#
72 lines
3.2 KiB
C#
using System;
|
|
using System.Web.Http;
|
|
using WebActivatorEx;
|
|
using MyCode.Project.WebApi;
|
|
using Swashbuckle.Application;
|
|
using MyCode.Project.WebApi.SwaggerExtensions;
|
|
using System.Web.Http.Description;
|
|
using MyCode.Project.WebApi.App_Start;
|
|
|
|
[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]
|
|
|
|
namespace MyCode.Project.WebApi
|
|
{
|
|
public class SwaggerConfig
|
|
{
|
|
public static void Register()
|
|
{
|
|
var thisAssembly = typeof(SwaggerConfig).Assembly;
|
|
|
|
GlobalConfiguration.Configuration
|
|
.EnableSwagger(c =>
|
|
{
|
|
// 配置多API版本
|
|
c.MultipleApiVersions(ResolveAreasSupportByRouteConstraint, (vc) =>
|
|
{
|
|
vc.Version("Admin", "ZHMD后台API");
|
|
vc.Version("Wechat", "ZHMD微信小程序端API");
|
|
vc.Version("Member", "ZHMD会员小程序端API");
|
|
vc.Version("v1", "ZHMD通用API", true);
|
|
vc.Version("ZhiBo", "直播API");
|
|
});
|
|
|
|
// c.SingleApiVersion("v1", "MyCode.Project.WebApi");
|
|
//c.ApiKey("Authorization").Description("OAuth2 Auth").In("header").Name("Bearer ");
|
|
c.ApiKey("Authorization").Description("OAuth2 Auth").In("header").Name("");
|
|
c.IncludeXmlComments(string.Format("{0}/bin/MyCode.Project.WebApi.xml", AppDomain.CurrentDomain.BaseDirectory));
|
|
c.IncludeXmlComments(string.Format("{0}/bin/MyCode.Project.Domain.xml", AppDomain.CurrentDomain.BaseDirectory));
|
|
c.IncludeXmlComments(string.Format("{0}/bin/MyCode.Project.Infrastructure.xml", AppDomain.CurrentDomain.BaseDirectory));
|
|
c.OperationFilter<AddAuthorizationHeaderParameterOperationFilter>();
|
|
c.OperationFilter<AddUploadOperationFilter>();
|
|
c.DocumentFilter<AuthTokenOperation>();
|
|
|
|
c.DocumentFilter<SwaggerAreasSupportDocumentFilter>();
|
|
|
|
c.ApiKey("Authorization").Description("OAuth2 Auth").In("header").Name("Authorization");
|
|
})
|
|
.EnableSwaggerUi(c =>
|
|
{
|
|
c.EnableApiKeySupport("Authorization", "header");
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// 解析区域路由
|
|
/// </summary>
|
|
/// <param name="apiDescription"></param>
|
|
/// <param name="targetApiVersion"></param>
|
|
/// <returns></returns>
|
|
private static bool ResolveAreasSupportByRouteConstraint(ApiDescription apiDescription, string targetApiVersion)
|
|
{
|
|
if (targetApiVersion == "v1")
|
|
{
|
|
return apiDescription.Route.RouteTemplate.StartsWith($"api{MyCode.Project.Domain.Config.SystemConfig.ApiVersion}" + "/{controller}");
|
|
}
|
|
|
|
var routeTemplateStart = $"api{MyCode.Project.Domain.Config.SystemConfig.ApiVersion}/" + targetApiVersion;
|
|
|
|
return apiDescription.Route.RouteTemplate.StartsWith(routeTemplateStart, StringComparison.CurrentCultureIgnoreCase);
|
|
}
|
|
}
|
|
}
|