我目前在我的项目中使用招摇,我在那里有超过100个控制器.我想由于控制器数量众多,swagger UI文档页面需要超过5分钟才能加载其控制器.是否可以在UI页面中选择特定控制器并仅为它们加载选项?
或者还有其他方法可以更快地加载UI页面?
帮我!
或者还有其他方法可以更快地加载UI页面?
帮我!
解决方法
使用swashbuckle的文档过滤器,你可以在事后删除生成的规范的一些元素,然后它们就不会被包含在集成的swagger-ui中.创建一个如下所示的类:
using System; using System.Web.Http.Description; using Swashbuckle.Swagger; internal class SwaggerFilterOutControllers : IDocumentFilter { void IDocumentFilter.Apply(SwaggerDocument swaggerDoc,SchemaRegistry schemaRegistry,IApiExplorer apiExplorer) { foreach (ApiDescription apiDescription in apiExplorer.ApiDescriptions) { Console.WriteLine(apiDescription.Route.RouteTemplate); if ((apiDescription.RelativePathSansQueryString().StartsWith("api/System/")) || (apiDescription.RelativePath.StartsWith("api/Internal/")) || (apiDescription.Route.RouteTemplate.StartsWith("apI/OtherStuff/")) ) { swaggerDoc.paths.Remove("/" + apiDescription.Route.RouteTemplate.TrimEnd('/')); } } } }
然后编辑您的SwaggerConfig.cs文件以包含过滤器:
GlobalConfiguration.Configuration .EnableSwagger(c => c.DocumentFilter<SwaggerFilterOutControllers>();
请注意,虽然控制器已从规范中删除,但其他项(如结果模型)仍将包含在规范中,并且可能仍会降低页面加载速度.
它也可能因为首先枚举所有控制器/模型等而变慢,在这种情况下这可能没有帮助.
编辑:我注意到每次查看UI页面时它都会重新生成整个定义(这可能会在您的场景中瘫痪).幸运的是,缓存它非常容易(这应该很好,因为它不应该在运行时为大多数人改变).
将其添加到您的配置:
c.CustomProvider((defaultProvider) => new CachingSwaggerProvider(defaultProvider));
using Swashbuckle.Swagger; using System.Collections.Concurrent; namespace <your namespace> { public class CachingSwaggerProvider : ISwaggerProvider { private static ConcurrentDictionary<string,SwaggerDocument> _cache = new ConcurrentDictionary<string,SwaggerDocument>(); private readonly ISwaggerProvider _swaggerProvider; public CachingSwaggerProvider(ISwaggerProvider swaggerProvider) { _swaggerProvider = swaggerProvider; } public SwaggerDocument GetSwagger(string rootUrl,string apiVersion) { string cacheKey = string.Format("{0}_{1}",rootUrl,apiVersion); return _cache.GetorAdd(cacheKey,(key) => _swaggerProvider.GetSwagger(rootUrl,apiVersion)); } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。