private Task LoadAssembliesAsync()
        {
            return(RunTaskAsync(async() =>
            {
                AllControllerNames = await Task.Run(() =>
                {
                    if (Command.Settings.AssemblyPaths?.Length > 0)
                    {
                        var generator = new WebApiAssemblyToSwaggerGenerator(Command.Settings);
                        return generator.GetControllerClasses();
                    }
                    else
                    {
                        return new string[] { }
                    };
                });

                if (ControllerNames != null)
                {
                    var newControllerNames = ControllerNames.ToList();
                    foreach (var controller in newControllerNames.ToArray())
                    {
                        if (!AllControllerNames.Contains(controller))
                        {
                            newControllerNames.Remove(controller);
                        }
                    }
                    ControllerNames = newControllerNames.ToArray();
                }
                else
                {
                    ControllerNames = new string[] { }
                };
            }));
        }
예제 #2
0
        public async Task <SwaggerService> RunAsync()
        {
            return(await Task.Run(() =>
            {
                var generator = new WebApiAssemblyToSwaggerGenerator(Settings);

                var controllerNames = ControllerNames.ToList();
                if (!string.IsNullOrEmpty(ControllerName))
                {
                    controllerNames.Add(ControllerName);
                }

                controllerNames = controllerNames.Where(s => !string.IsNullOrWhiteSpace(s)).Distinct().ToList();
                if (!controllerNames.Any() && Settings.AssemblyPaths?.Length > 0)
                {
                    controllerNames = generator.GetControllerClasses().ToList();
                }

                var service = generator.GenerateForControllers(controllerNames);

                if (!string.IsNullOrEmpty(ServiceHost))
                {
                    service.Host = ServiceHost;
                }
                if (ServiceSchemes != null && ServiceSchemes.Any())
                {
                    service.Schemes = ServiceSchemes.Select(s => (SwaggerSchema)Enum.Parse(typeof(SwaggerSchema), s, true)).ToList();
                }

                return service;
            }));
        }
예제 #3
0
        static void Main(string[] args)
        {
            var currentFolder = Directory.GetCurrentDirectory();
            var pathToDll     = Path.Combine(currentFolder, "..", "ContactsList/bin/Debug/netcoreapp1.1/AspNetCoreSpa.dll");
            var settings      = new WebApiAssemblyToSwaggerGeneratorSettings
            {
                AssemblyPaths               = new string[] { pathToDll },
                DefaultUrlTemplate          = "api/{controller}/{action}/{id}",
                DefaultPropertyNameHandling = NJsonSchema.PropertyNameHandling.CamelCase
            };

            //var excluded = new string[] { "Manage", "Base", "Home" };
            var generator  = new WebApiAssemblyToSwaggerGenerator(settings);
            var allClasses = generator.GetControllerClasses();
            //var necessaryClasses = allClasses.Except(allClasses.Where(x => excluded.Any(y => x.Contains(y)))
            //    ).ToArray();
            var controllersToGenerate = new string[] { "File" };
            var necessaryClasses      = allClasses.Where(x => controllersToGenerate.Any(y => x.Contains(y)))
                                        .ToArray();
            var document = generator.GenerateForControllersAsync(necessaryClasses).Result;

            var settingsForClientApiGeneration = new SwaggerToTypeScriptClientGeneratorSettings
            {
                ClassName = "{controller}Client",
                Template  = TypeScriptTemplate.Angular
            };

            var generatorApi = new SwaggerToTypeScriptClientGenerator(document, settingsForClientApiGeneration);
            var code         = generatorApi.GenerateFile();

            code = ImproveGeneration(code);
            File.WriteAllText(Path.Combine(currentFolder, "..", "ContactsList/Client/app", "apiDefinitions.ts"), code);
        }
        private Task LoadAssembly()
        {
            return(RunTaskAsync(async() =>
            {
                AllControllerNames = await Task.Run(() =>
                {
                    var generator = new WebApiAssemblyToSwaggerGenerator(AssemblyPath);
                    return generator.GetControllerClasses();
                });

                ControllerName = AllControllerNames.FirstOrDefault();
            }));
        }
예제 #5
0
        private Task LoadAssemblyAsync(bool updateSelectedController)
        {
            return(RunTaskAsync(async() =>
            {
                AllControllerNames = await Task.Run(() =>
                {
                    var generator = new WebApiAssemblyToSwaggerGenerator(Command.Settings);
                    return generator.GetControllerClasses();
                });

                if (updateSelectedController)
                {
                    if (ControllerName != null && !AllControllerNames.Contains(ControllerName))
                    {
                        ControllerName = AllControllerNames.FirstOrDefault();
                    }
                }
            }));
        }
예제 #6
0
        public async Task <string> RunAsync()
        {
            var generator = new WebApiAssemblyToSwaggerGenerator(Settings);

            var controllerNames = ControllerNames.ToList();

            if (!string.IsNullOrEmpty(ControllerName))
            {
                controllerNames.Add(ControllerName);
            }

            controllerNames = controllerNames.Where(s => !string.IsNullOrWhiteSpace(s)).Distinct().ToList();
            if (!controllerNames.Any())
            {
                controllerNames = generator.GetControllerClasses().ToList();
            }

            var service = generator.GenerateForControllers(controllerNames);

            return(service.ToJson());
        }
예제 #7
0
        public async Task <SwaggerService> RunAsync()
        {
            return(await Task.Run(() =>
            {
                var generator = new WebApiAssemblyToSwaggerGenerator(Settings);

                var controllerNames = ControllerNames.ToList();
                if (!string.IsNullOrEmpty(ControllerName))
                {
                    controllerNames.Add(ControllerName);
                }

                controllerNames = controllerNames.Where(s => !string.IsNullOrWhiteSpace(s)).Distinct().ToList();
                if (!controllerNames.Any() && Settings.AssemblyPaths?.Length > 0)
                {
                    controllerNames = generator.GetControllerClasses().ToList();
                }

                return generator.GenerateForControllers(controllerNames);
            }));
        }
        private void GenerateWebApiSwagger(FilePath outputFile, SwaggerGeneratorSettings settings)
        {
            var genSettings = settings.JsonSettings as WebApiAssemblyToSwaggerGeneratorSettings ??
                              SettingsFactory.GetWebApiToSwaggerSettings();

            genSettings.AssemblyPaths               = new [] { Source.MakeAbsolute(Environment).FullPath };
            genSettings.DefaultUrlTemplate          = settings.DefaultUrlTemplate;
            genSettings.DefaultEnumHandling         = settings.EnumAsString ? EnumHandling.String : EnumHandling.Integer;
            genSettings.DefaultPropertyNameHandling = settings.CamelCaseProperties
                ? PropertyNameHandling.CamelCase
                : PropertyNameHandling.Default;
            genSettings.NullHandling   = NullHandling.Swagger;
            genSettings.ReferencePaths = settings.AssemblyPaths.Select(a => a.FullPath).ToArray();
            var gen     = new WebApiAssemblyToSwaggerGenerator(genSettings);
            var service = gen.GenerateForControllers(gen.GetControllerClasses());

            service.BasePath         = settings.BasePath ?? "";
            service.Info.Title       = settings.ApiTitle ?? "";
            service.Info.Description = settings.ApiDescription ?? "";
            using (var stream = new StreamWriter(FileSystem.GetFile(outputFile).OpenWrite()))
            {
                stream.WriteAsync(service.ToJson()).Wait();
            }
        }