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(); c.OperationFilter(); c.DocumentFilter(); c.DocumentFilter(); c.ApiKey("Authorization").Description("OAuth2 Auth").In("header").Name("Authorization"); }) .EnableSwaggerUi(c => { c.EnableApiKeySupport("Authorization", "header"); }); } /// /// 解析区域路由 /// /// /// /// 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); } } }