Example #1
0
        /// <summary>Generates the Swagger specification.</summary>
        /// <param name="context">The context.</param>
        /// <returns>The Swagger specification.</returns>
        protected virtual string GenerateSwagger(HttpContext context)
        {
            if (_swaggerJson == null)
            {
                lock (_lock)
                {
                    if (_swaggerJson == null)
                    {
                        var generator = new WebApiToSwaggerGenerator(_settings, _schemaGenerator);
                        var service   = generator.GenerateForControllers(_controllerTypes);

                        service.Host = context.Request.Host.Value ?? "";
                        service.Schemes.Add(context.Request.Scheme == "http" ? SwaggerSchema.Http : SwaggerSchema.Https);
                        service.BasePath = context.Request.PathBase.Value?.Substring(0, context.Request.PathBase.Value.Length - _settings.MiddlewareBasePath?.Length ?? 0) ?? "";

                        foreach (var processor in _settings.DocumentProcessors)
                        {
                            processor.Process(service);
                        }

#pragma warning disable 618
                        _settings.PostProcess?.Invoke(service);
#pragma warning restore 618
                        _swaggerJson = service.ToJson();
                    }
                }
            }

            return(_swaggerJson);
        }
Example #2
0
        /// <summary>Generates the Swagger specification.</summary>
        /// <param name="context">The context.</param>
        /// <returns>The Swagger specification.</returns>
        protected virtual string GenerateSwagger(IOwinContext context)
        {
            if (_swaggerJson == null)
            {
                lock (_lock)
                {
                    if (_swaggerJson == null)
                    {
                        try
                        {
                            var generator = new WebApiToSwaggerGenerator(_settings, _schemaGenerator);
                            var service   = generator.GenerateForControllers(_controllerTypes);

                            service.Host = context.Request.Host.Value ?? "";
                            service.Schemes.Add(context.Request.Scheme == "http" ? SwaggerSchema.Http : SwaggerSchema.Https);
                            service.BasePath = context.Request.PathBase.Value?.Substring(0, context.Request.PathBase.Value.Length - _settings.MiddlewareBasePath?.Length ?? 0) ?? "";

                            _settings.PostProcess?.Invoke(service);
                            _swaggerJson = service.ToJson();
                        }
                        catch (Exception exception)
                        {
                            _swaggerJson = exception.ToString();
                        }
                    }
                }
            }

            return(_swaggerJson);
        }
Example #3
0
        public static string ExportController(IEnumerable <Type> controllers, APIConfig config, string swaggerTitle)
        {
            var settings = new AssemblyTypeToSwaggerGeneratorSettings();

            // dll路径
            settings.ApiSetting = new WebApiToSwaggerGeneratorSettings
            {
                Title = swaggerTitle,
                // action方法名提取
                ActionPathRegex = config.ActionPathRegex,
                // 控制器类名提取
                ControllerPathRegex = config.ControllerPathRegex,
                // 命名空间提取到module
                NameSpacePathRegex = config.NameSpacePathRegex,
                // 解析时是否忽略
                SwaggerIgnoreAttribute = config.SwaggerIgnoreAttribute,
                // verb属性: post,get,put等
                VerbAttribute = config.VerbAttribute,
                // 根据此参数的属性是否存在, 值判断参数是否可选
                RequiredParemeterAttribute = config.RequiredParemeterAttribute
            };

            var generator = new WebApiToSwaggerGenerator(settings.ApiSetting);
            var doc       = generator.GenerateForControllers(controllers);

            return(doc.ToJson());
        }
Example #4
0
        /// <summary>Generates the Swagger specification.</summary>
        /// <param name="context">The context.</param>
        /// <returns>The Swagger specification.</returns>
        protected virtual string GenerateSwagger(IOwinContext context)
        {
            if (_swaggerJson == null)
            {
                lock (_lock)
                {
                    if (_swaggerJson == null)
                    {
                        try
                        {
                            var generator = new WebApiToSwaggerGenerator(_settings, _schemaGenerator);
                            var document = generator.GenerateForControllers(_controllerTypes);

                            document.Host = context.Request.Host.Value ?? "";
                            document.Schemes.Add(context.Request.Scheme == "http" ? SwaggerSchema.Http : SwaggerSchema.Https);
                            document.BasePath = context.Request.PathBase.Value?.Substring(0, context.Request.PathBase.Value.Length - _settings.MiddlewareBasePath?.Length ?? 0) ?? "";

                            _settings.PostProcess?.Invoke(document);
                            _swaggerJson = document.ToJson();
                        }
                        catch (Exception exception)
                        {
                            _swaggerJson = exception.ToString();
                        }
                    }
                }
            }

            return _swaggerJson;
        }
        public IActionResult Generate()
        {
            var settings = new WebApiToSwaggerGeneratorSettings
            {
                DefaultUrlTemplate          = "api/{controller}/{action}/{id}",
                DefaultPropertyNameHandling = PropertyNameHandling.CamelCase
            };
            var generator   = new WebApiToSwaggerGenerator(settings);
            var controllers = typeof(Ng2GenerateController).GetTypeInfo().Assembly.GetTypes()
                              .Where(t => typeof(Controller).IsAssignableFrom(t))
                              .ToList();
            var document = generator.GenerateForControllers(controllers);

            //var json = document.ToJson();
            //return Content(document.ToJson());

            var typescriptGeneratorSettings = new SwaggerToTypeScriptClientGeneratorSettings()
            {
                ClassName                = "{controller}Client",
                Template                 = TypeScriptTemplate.Angular2,
                GenerateClientClasses    = true,
                GenerateClientInterfaces = true,
                GenerateDtoTypes         = true,

                TypeScriptGeneratorSettings = new TypeScriptGeneratorSettings()
                {
                    TypeStyle = TypeScriptTypeStyle.Interface,

                    //TypeNameGenerator = new MyTypeNameGenerator(),
                }
            };

            var tsGenerator = new SwaggerToTypeScriptClientGenerator(document, typescriptGeneratorSettings);
            var typescript  = tsGenerator.GenerateFile();

            typescript = @"
// this is file generated by hitting the /swagger/ng2 endpoint
" + typescript;

            // hack!
            typescript = typescript.Replace("return <Observable<any>><any>Observable.throw(e);",
                                            "return <Observable<any>><any>Observable.throw(response);");

            typescript = typescript.Replace("return <Observable<UserProfileVm>><any>Observable.throw(e)",
                                            "return <Observable<any>><any>Observable.throw(response)");

            // write typescript to file under ng app
            var webRoot = _env.WebRootPath;
            var file    = System.IO.Path.Combine(webRoot, @"..\ClientApp\app\Right4MeClient.ts");

            System.IO.File.WriteAllText(file, typescript);

            return(Content(typescript));
        }
            /// <exception cref="InvalidOperationException">No assembly paths have been provided.</exception>
            internal string GenerateForControllers(IEnumerable <string> controllerClassNames, string settingsData)
            {
                var settings = JsonConvert.DeserializeObject <WebApiAssemblyToSwaggerGeneratorSettings>(settingsData);

                RegisterReferencePaths(GetAllReferencePaths(settings));
                IEnumerable <Type> controllers = GetControllerTypes(controllerClassNames, settings);

                var generator = new WebApiToSwaggerGenerator(settings);

                return(generator.GenerateForControllers(controllers).ToJson());
            }
Example #7
0
        private string GenerateSwagger(HttpContext context)
        {
            if (_swaggerJson == null)
            {
                lock (_lock)
                {
                    if (_swaggerJson == null)
                    {
                        var generator = new WebApiToSwaggerGenerator(_settings);
                        var service   = generator.GenerateForControllers(_controllerTypes);

                        _settings.PostProcess?.Invoke(service);
                        _swaggerJson = service.ToJson();
                    }
                }
            }

            return(_swaggerJson);
        }
Example #8
0
        private string GenerateSwagger(IOwinContext context)
        {
            if (_swaggerJson == null)
            {
                lock (_lock)
                {
                    if (_swaggerJson == null)
                    {
                        var generator = new WebApiToSwaggerGenerator(_settings);
                        var service   = generator.GenerateForControllers(_controllerTypes);

                        _settings.SwaggerServiceTransformer?.Transform(service);
                        _swaggerJson = service.ToJson();
                    }
                }
            }

            return(_swaggerJson);
        }
            internal string GenerateForAssemblyControllers(string assemblyPath, string urlTemplate, string jsonSchemaGeneratorSettingsData)
            {
                var jsonSchemaGeneratorSettings = JsonConvert.DeserializeObject<JsonSchemaGeneratorSettings>(jsonSchemaGeneratorSettingsData);

                var assembly = Assembly.LoadFrom(assemblyPath);
                var controllers = assembly.ExportedTypes
                    .Where(t => t.InheritsFrom("ApiController")).ToArray();

                var generator = new WebApiToSwaggerGenerator(urlTemplate, jsonSchemaGeneratorSettings);
                return generator.GenerateForControllers(controllers).ToJson();
            }
            internal string GenerateForAssemblyControllers(string settingsData)
            {
                var settings = JsonConvert.DeserializeObject<WebApiAssemblyToSwaggerGeneratorSettings>(settingsData);

                var assembly = Assembly.LoadFrom(settings.AssemblyPath);
                var controllers = assembly.ExportedTypes
                    .Where(t => t.InheritsFrom("ApiController") || t.InheritsFrom("Controller")).ToArray(); 

                var generator = new WebApiToSwaggerGenerator(settings);
                return generator.GenerateForControllers(controllers).ToJson();
            }
            /// <exception cref="InvalidOperationException">No assembly paths have been provided.</exception>
            internal string GenerateForControllers(IEnumerable<string> controllerClassNames, string settingsData)
            {
                var settings = JsonConvert.DeserializeObject<WebApiAssemblyToSwaggerGeneratorSettings>(settingsData);

                RegisterReferencePaths(GetAllReferencePaths(settings));
                IEnumerable<Type> controllers = GetControllerTypes(controllerClassNames, settings);

                var generator = new WebApiToSwaggerGenerator(settings);
                return generator.GenerateForControllers(controllers).ToJson();
            }
            internal string GenerateForControllers(IEnumerable<string> controllerClassNames, string settingsData)
            {
                var settings = JsonConvert.DeserializeObject<WebApiAssemblyToSwaggerGeneratorSettings>(settingsData);

                var assembly = Assembly.LoadFrom(settings.AssemblyPath);
                var controllers = controllerClassNames.Select(c => assembly.GetType(c));

                var generator = new WebApiToSwaggerGenerator(settings);
                return generator.GenerateForControllers(controllers).ToJson();
            }