protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var setting = Its.Configuration.Settings.Get <SwaggerToolSettings>(); //using refletions to internal var swaggerProvider = (ISwaggerProvider)_config.GetType().GetMethod("GetSwaggerProvider", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(_config, new object[] { request }); var rootUrl = (string)_config.GetType().GetMethod("GetRootUrl", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(_config, new object[] { request }); //var type = request.GetRouteData().Values["type"].ToString(); try { var swaggerDoc = swaggerProvider.GetSwagger(rootUrl, setting.version); var str = JsonConvert.SerializeObject(swaggerDoc, Formatting.Indented, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, Converters = new[] { new VendorExtensionsConverter() } }); var service = NSwag.SwaggerDocument.FromJson(str); var code = new PostManGen().Gen(service, rootUrl, setting); var req = new HttpResponseMessage { Content = new StringContent(code) }; req.Content.Headers.Add("Content-Disposition", "attachment;filename=swagger2postman.json"); return(TaskFor(req)); } catch (UnknownApiVersion ex) { return(TaskFor(request.CreateErrorResponse(HttpStatusCode.NotFound, ex))); } }
protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var _swaggerstore = IocManager.Instance.Resolve <ISwaggerStore>(); var setting = Its.Configuration.Settings.Get <Config.SwaggerToolSettings>(); //using refletions to internal var swaggerProvider = (ISwaggerProvider) _config.GetType() .GetMethod("GetSwaggerProvider", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic) .Invoke(_config, new object[] { request }); var rootUrl = (string) _config.GetType() .GetMethod("GetRootUrl", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic) .Invoke(_config, new object[] { request }); var apiVersion = request.GetRouteData().Values["apiVersion"].ToString(); try { var swaggerDoc = swaggerProvider.GetSwagger(rootUrl, apiVersion); var last = _swaggerstore.GetLastVersion(); ApiVersionInfo info = new ApiVersionInfo(); info.GenDateTime = DateTime.Now.ToString(); info.SwaggerDoc = JsonConvert.SerializeObject(swaggerDoc, Formatting.Indented, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, Converters = new[] { new VendorExtensionsConverter() } }); var md5 = MD5.Create(); using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(info.SwaggerDoc))) { info.md5 = BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", ""); } if (last != null) { SwaggerDiff diff = new SwaggerDiff(); var re = await diff.Diff(info.SwaggerDoc, last.SwaggerDoc); //info.BackwardsCompatible = re.Item2; info.ChangeLogs = FormatChangelogDesc(re); } _swaggerstore.ImportNewVersion(info); var content = new StringContent(_swaggerstore.GetChangeLogInfo()); return(new HttpResponseMessage { Content = content }); } catch (UnknownApiVersion ex) { return(request.CreateErrorResponse(HttpStatusCode.NotFound, ex)); } }
private ISwaggerProvider GetSwaggerProvider(HttpConfiguration configuration, SwaggerDocsConfig swaggerDocsConfig) { var method = swaggerDocsConfig.GetType() .GetMethod("GetSwaggerProvider", BindingFlags.Instance | BindingFlags.NonPublic); var request = new HttpRequestMessage(); request.SetRequestContext(new HttpRequestContext { Configuration = configuration }); return((ISwaggerProvider)method.Invoke(swaggerDocsConfig, new object[] { request })); }
protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var setting = Its.Configuration.Settings.Get <Config.SwaggerToolSettings>(); //using refletions to internal var swaggerProvider = (ISwaggerProvider)_config.GetType().GetMethod("GetSwaggerProvider", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(_config, new object[] { request }); var rootUrl = (string)_config.GetType().GetMethod("GetRootUrl", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(_config, new object[] { request }); var q = request.GetRouteData().Values["q"].ToString(); var apiVersion = request.GetRouteData().Values["apiVersion"].ToString(); try { var swaggerDoc = swaggerProvider.GetSwagger(rootUrl, apiVersion); //筛选条件为path包含q IList <string> keytoremove = new List <string>(); foreach (var item in swaggerDoc.paths) { if (!item.Key.ToUpper().Contains(q.ToUpper())) { keytoremove.Add(item.Key); } } foreach (var item in keytoremove) { swaggerDoc.paths.Remove(item); } var content = ContentFor(request, swaggerDoc); return(TaskFor(new HttpResponseMessage { Content = content })); } catch (UnknownApiVersion ex) { return(TaskFor(request.CreateErrorResponse(HttpStatusCode.NotFound, ex))); } }
public static SwaggerDocsConfig UseReflectionDocumentation(this SwaggerDocsConfig source) { source.OperationFilter(() => ReflectionDocumentationProvider.Default); //HACK: This is a hack to get access to the model filters because it isn't public //source.ModelFilters<ReflectionDocumentationProvider>(); var modelFilters = source.GetType().GetField("_modelFilters", BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance); var filters = modelFilters?.GetValue(source) as System.Collections.Generic.IList <Func <IModelFilter> >; if (filters != null) { filters.Add(() => ReflectionDocumentationProvider.Default); } else { Debug.WriteLine("Unable to get model filters from SwaggerDocsConfig, model documentation will be unavailable."); } return(source); }