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)));
            }
        }
예제 #2
0
        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 }));
        }
예제 #4
0
        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);
        }