예제 #1
0
        private static async Task GenerateGlossarySdk()
        {
            if (!baseUrl.EndsWith("/"))
            {
                baseUrl += "/";
            }
            var url      = baseUrl + "swagger/v1/swagger.json";
            var document = await SwaggerDocument.FromUrlAsync(url);

            var settings = new SwaggerToCSharpClientGeneratorSettings
            {
                ClassName = "GlossaryClient",
                GenerateClientInterfaces = true,
                OperationNameGenerator   = new SingleClientFromOperationIdOperationNameGenerator(),
                ExceptionClass           = "GlossaryClientException",
                InjectHttpClient         = true,
                CSharpGeneratorSettings  =
                {
                    Namespace  = "Glossary.Client",
                    ClassStyle = NJsonSchema.CodeGeneration.CSharp.CSharpClassStyle.Poco,
                    ArrayType  = "System.Collections.Generic.List"
                }
            };

            var generator = new SwaggerToCSharpClientGenerator(document, settings);
            var code      = generator.GenerateFile();

            code = code.Replace("Required = Newtonsoft.Json.Required.Always", "Required = Newtonsoft.Json.Required.Default");
            var path = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..\\..\\..\\..\\Client\\GlossaryClient.cs"));

            File.WriteAllText(path, code);
            Console.WriteLine("Glossary sdk generated");
        }
예제 #2
0
        public static async Task Main(string[] args)
        {
            var document = await SwaggerDocument.FromUrlAsync("http://localhost:49530/swagger/docs/v1");

            var settings = new SwaggerToCSharpClientGeneratorSettings
            {
                ClassName = "CarClient",
                CSharpGeneratorSettings = { Namespace = "Example" }
            };

            var generator = new SwaggerToCSharpClientGenerator(document, settings);

            var code           = generator.GenerateFile();
            var clientFilePath = Path.Combine(Assembly.GetExecutingAssembly().Location, "../../../CarClient.cs");

            if (!File.Exists(clientFilePath))
            {
                File.Create(clientFilePath);
            }

            using (var tw = new StreamWriter(clientFilePath, false))
            {
                await tw.WriteAsync(code).ConfigureAwait(false);
            }
        }
예제 #3
0
        private static async Task GeneratePaymentSdk()
        {
            if (!baseUrl.EndsWith("/"))
            {
                baseUrl += "/";
            }
            var url      = baseUrl + "swagger/v1/swagger.json";
            var document = await SwaggerDocument.FromUrlAsync(url);

            var settings = new SwaggerToCSharpClientGeneratorSettings
            {
                ClassName = "ApiClient",
                GenerateClientInterfaces = true,
                OperationNameGenerator   = new SingleClientFromOperationIdOperationNameGenerator(),
                ExceptionClass           = "ApiClientException",
                InjectHttpClient         = true,
                CSharpGeneratorSettings  =
                {
                    Namespace  = "ServerlessTemplate",
                    ClassStyle = NJsonSchema.CodeGeneration.CSharp.CSharpClassStyle.Poco,
                    ArrayType  = "System.Collections.Generic.List"
                },
            };

            var generator = new SwaggerToCSharpClientGenerator(document, settings);
            var code      = generator.GenerateFile();
            var path      = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..\\..\\..\\..\\Client\\ApiClient.cs"));

            File.WriteAllText(path, code);
            Console.WriteLine("Api client generated");
        }
예제 #4
0
        static void Main(string[] args)
        {
            var swaggerSpecUrl = args.Length > 0 ? args[0] : DefaultSwaggerSpecUrl;
            var outputFile     = args.Length > 1 ? args[1] : DefaultOutputFile;

            Console.WriteLine($"Swagger描述文档地址为:{swaggerSpecUrl}");
            Console.WriteLine($"客户端代理类输出地址为:{Path.GetFullPath(outputFile)}");

            // 配置
            var document = SwaggerDocument.FromUrlAsync(swaggerSpecUrl).GetAwaiter().GetResult();
            var settings = new SwaggerToTypeScriptClientGeneratorSettings
            {
                ClassName = "{controller}" + ClassNameSuffix,
                OperationNameGenerator = new MultipleClientsFromPathSegmentsOperationNameGenerator(),
                HttpClass          = HttpClass.HttpClient,
                InjectionTokenType = InjectionTokenType.InjectionToken,
                ClientBaseClass    = null,
                Template           = TypeScriptTemplate.Angular
            };

            settings.TypeScriptGeneratorSettings.DateTimeType        = TypeScriptDateTimeType.Date;
            settings.TypeScriptGeneratorSettings.GenerateCloneMethod = true;
            settings.TypeScriptGeneratorSettings.ExtendedClasses     = null;
            settings.CodeGeneratorSettings.TemplateDirectory         = "Template";

            // 生成客户端代理类
            GenerateFile(document, settings, outputFile);
            Console.WriteLine("生成客户端代理类成功");

            // 生成Module
            GenerateModule(document, settings, GetModuleFile(outputFile));
            Console.WriteLine("生成模块文件成功");
        }
    public static void UseGeneratedClient(this IApplicationBuilder app, string url)
    {
        Task.Run(() => {
            Thread.Sleep(2000);

            SwaggerDocument document = null;
            int attemptCount         = 0;

            while (document == null && attemptCount < 5)
            {
                attemptCount++;
                System.Console.WriteLine("Attempting to load swagger specification for client generation.");
                try {
                    document = SwaggerDocument.FromUrlAsync(url).Result;
                } catch {
                    System.Console.WriteLine("Failed to load swagger specification. Retry in 2 seconds.");
                    Thread.Sleep(2000);
                }
            }

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

            var generator = new SwaggerToTypeScriptClientGenerator(document, settings);

            var code = generator.GenerateFile();

            System.Console.WriteLine(code);
            System.IO.File.WriteAllText(@"./ClientApp/src/app/app.service.ts", code);
        });
    }
예제 #6
0
        private async void simpleButton1_Click(object sender, EventArgs e)
        {
            if (!Directory.Exists(beDest.Text))
            {
                MessageBox.Show("The target directory does not exist.");
                return;
            }

            var schemaSwagger = await SwaggerDocument.FromUrlAsync(meURL.Text);

            TypeScriptGeneratorSettings tsGenSettings = new TypeScriptGeneratorSettings()
            {
                ConvertConstructorInterfaceData = true,
                TypeStyle = TypeScriptTypeStyle.KnockoutClass,
                MarkOptionalProperties = true,
                GenerateDefaultValues  = false,
                PropertyNameGenerator  = new myPropertyNameGenerator(),
                TypeNameGenerator      = new myTypeNameGenerator(),
                TypeScriptVersion      = 2.4m
            };

            var _resolver = new TypeScriptTypeResolver(tsGenSettings);

            _resolver.RegisterSchemaDefinitions(schemaSwagger.Definitions);
            var generatorJ = new TypeScriptGenerator(schemaSwagger, tsGenSettings, _resolver);
            var typeDef    = generatorJ.GenerateTypes();

            foreach (CodeArtifact codeArtifact in typeDef.Artifacts)
            {
                File.WriteAllText(Path.Combine(beDest.Text, codeArtifact.TypeName + ".ts"), meFileHeader.Text + "\n\n" + codeArtifact.Code);
            }
        }
예제 #7
0
 private async Task <SwaggerDocument> GetSwaggerDocAsync()
 {
     if (string.IsNullOrWhiteSpace(SwaggerUrl))
     {
         throw new Exception("No Swagger URL was provided.");
     }
     return(await SwaggerDocument.FromUrlAsync(SwaggerUrl));
 }
예제 #8
0
        public async Task When_Swagger_is_loaded_from_url_schematype_is_Swagger2()
        {
            //// Arrange


            //// Act
            var document = await SwaggerDocument.FromUrlAsync("http://petstore.swagger.io/v2/swagger.json");

            //// Assert
            Assert.True(document.SchemaType == NJsonSchema.SchemaType.Swagger2);
        }
예제 #9
0
        // TODO: Reenable test
        //[Fact]
        public async Task When_OpenApi_is_loaded_from_url_schematype_is_OpenApi3()
        {
            //// Arrange


            //// Act
            var document = await SwaggerDocument.FromUrlAsync("https://api.percipio.com/common/swagger.json");

            //// Assert
            Assert.True(document.SchemaType == NJsonSchema.SchemaType.OpenApi3);
        }
예제 #10
0
        public async Task When_Swagger_is_loaded_from_url_then_it_works()
        {
            //// Arrange


            //// Act
            var document = await SwaggerDocument.FromUrlAsync("http://petstore.swagger.io/v2/swagger.json");

            //// Assert
            Assert.NotNull(document);
        }
예제 #11
0
        internal static List <ExplorerItem> GetSchemaAndBuildAssembly(string driverLocation, ConnectionProperties props, AssemblyName name, ref string nameSpace, ref string typeName)
        {
            var document = SwaggerDocument.FromUrlAsync(props.Uri).Result;

            // Compile the code into the assembly, using the assembly name provided:
            BuildAssemblySingleClientFromOpId(document, driverLocation, name, nameSpace, ref typeName);

            //// Use the schema to populate the Schema Explorer:
            List <ExplorerItem> schema = GetSchemaSingleClient(document, typeName);

            return(schema);
        }
예제 #12
0
 /// <summary>
 /// 获取swagger文档
 /// </summary>
 /// <param name="swagger"></param>
 /// <returns></returns>
 private static SwaggerDocument GetDocument(string swagger)
 {
     Console.WriteLine($"正在分析swagger:{swagger}");
     if (Uri.TryCreate(swagger, UriKind.Absolute, out var _) == true)
     {
         return(SwaggerDocument.FromUrlAsync(swagger).Result);
     }
     else
     {
         return(SwaggerDocument.FromFileAsync(swagger).Result);
     }
 }
예제 #13
0
        public static async Task <Document> FromUrlAsync(string url)
        {
            var document = await SwaggerDocument.FromUrlAsync(url);

            var converter   = new SwaggerConverter(document);
            var models      = document.Definitions.ToDictionary(definition => definition.Value, definition => converter.CreateModel(definition.Key, definition.Value));
            var controllers = converter.CreateControllers().ToList();

            converter.ApplyModelReferences(models);
            return(new Document {
                Models = models.Values.ToList(), Controllers = controllers
            });
        }
예제 #14
0
        private static Task <SwaggerDocument> LoadDocument(Uri swaggerUri)
        {
            if (!swaggerUri.IsAbsoluteUri)
            {
                return(SwaggerDocument.FromFileAsync(swaggerUri.ToString()));
            }
            else if (swaggerUri.Scheme == "file")
            {
                return(SwaggerDocument.FromFileAsync(swaggerUri.LocalPath));
            }

            return(SwaggerDocument.FromUrlAsync(swaggerUri.ToString()));
        }
예제 #15
0
        public static async Task RegenApiClient(ApiClientDefinition definition)
        {
            var document =
                !definition.SwaggerFile.IsAbsoluteUri ? await SwaggerDocument.FromFileAsync(definition.SwaggerFile.ToString()) :
                definition.SwaggerFile.Scheme == "file" ? await SwaggerDocument.FromFileAsync(definition.SwaggerFile.LocalPath) :
                await SwaggerDocument.FromUrlAsync(definition.SwaggerFile.ToString());

            PopulateOperationIds(document);
            var(isSingleClient, typeName) = GenerateCSharp(document, definition);
            GenerateTS(document, definition);

            Console.WriteLine($"Api clients generated. To register in dotvvm put following to your DotvvmStartup: ");
            Console.WriteLine($"config.RegisterApi{(isSingleClient ? "Client" : "Group")}(typeof({definition.Namespace}.{(definition.GenerateWrapperClass || isSingleClient ? typeName : " ... your client wrapper class ...")}), \"{ document.BasePath ?? "... you api endpoint ..." }\", \"{(definition.CompileTypescript ? Path.ChangeExtension(definition.TypescriptClient, "js") : "... path to your compiled javascript")}\");");
        }
예제 #16
0
 /// <summary>Loads the Swagger spec.</summary>
 public async Task <SwaggerDocument> RunAsync()
 {
     if (!string.IsNullOrEmpty(Swagger))
     {
         return(await SwaggerDocument.FromJsonAsync(Swagger).ConfigureAwait(false));
     }
     else if (Url.StartsWith("http://") || Url.StartsWith("https://"))
     {
         return(await SwaggerDocument.FromUrlAsync(Url).ConfigureAwait(false));
     }
     else
     {
         return(await SwaggerDocument.FromFileAsync(Url).ConfigureAwait(false));
     }
 }
예제 #17
0
        public async static Task <string> GenerateFromUrl(string url, string namespaceName, string className)
        {
            var document = await SwaggerDocument.FromUrlAsync(url);

            var settings = new SwaggerToCSharpClientGeneratorSettings
            {
                ClassName = className,
                CSharpGeneratorSettings =
                {
                    Namespace = namespaceName
                }
            };
            var generator = new SwaggerToCSharpClientGenerator(document, settings);

            return(generator.GenerateFile());
        }
예제 #18
0
        private async Task <SwaggerDocument> GetSwaggerDocAsync()
        {
            SwaggerDocument doc = null;

            if (!string.IsNullOrWhiteSpace(SwaggerUrl))
            {
                doc = await SwaggerDocument.FromUrlAsync(SwaggerUrl);
            }
            else if (!string.IsNullOrWhiteSpace(SwaggerJson))
            {
                doc = await SwaggerDocument.FromUrlAsync(SwaggerJson);
            }
            else
            {
                throw new Exception("Swagger url or json must be provided");
            }
            return(doc);
        }
예제 #19
0
        static async Task GenerateClient()
        {
            var document = await SwaggerDocument.FromUrlAsync("http://localhost:58829/swagger/v1/swagger.json");

            var settings = new SwaggerToCSharpClientGeneratorSettings
            {
                ClassName = "PokemonLookupAPIClient",
                CSharpGeneratorSettings =
                {
                    Namespace = "PokemonLookupCSharp"
                }
            };

            var generator = new SwaggerToCSharpClientGenerator(document, settings);
            var code      = generator.GenerateFile(NSwag.CodeGeneration.ClientGeneratorOutputType.Full);
            var appFolder = Path.Combine(Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.Parent.FullName, "PokemonLookupCSharp");

            File.WriteAllText(Path.Combine(appFolder, "Client.cs"), code);
        }
예제 #20
0
        static void Main(string[] args)
        {
//            var document = SwaggerDocument.FromUrlAsync("https://api.docxmerge.com/api/swagger/v1/swagger.json").Result;
            var document = SwaggerDocument.FromUrlAsync("http://localhost:5101/swagger/v1/swagger.json").Result;

            var clientSettings = new SwaggerToCSharpClientGeneratorSettings
            {
                ClassName = "DocxmergeApi",
                CSharpGeneratorSettings =
                {
                    Namespace = "Docxmerge"
                }
            };
            var clientGenerator = new SwaggerToCSharpClientGenerator(document, clientSettings);

            var code = clientGenerator.GenerateFile();

            File.WriteAllText("../Docxmerge/Api.cs", code);
        }
예제 #21
0
        /// <exception cref="ArgumentException">The argument 'Input' was empty.</exception>
        protected async Task <SwaggerDocument> GetInputSwaggerDocument()
        {
            var document = Input as SwaggerDocument;

            if (document == null)
            {
                var inputString = Input.ToString();
                if (string.IsNullOrEmpty(inputString))
                {
                    throw new ArgumentException("The argument 'Input' was empty.");
                }

                if (IsJson(inputString))
                {
                    document = await SwaggerDocument.FromJsonAsync(inputString).ConfigureAwait(false);
                }
                else if (inputString.StartsWith("http://") || inputString.StartsWith("https://"))
                {
                    document = await SwaggerDocument.FromUrlAsync(inputString).ConfigureAwait(false);
                }
                else
                {
                    document = await SwaggerDocument.FromFileAsync(inputString).ConfigureAwait(false);
                }
            }

            if (ServiceHost == ".")
            {
                document.Host = string.Empty;
            }
            else if (!string.IsNullOrEmpty(ServiceHost))
            {
                document.Host = ServiceHost;
            }

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

            return(document);
        }
예제 #22
0
        static async Task Generate()
        {
            var document = await SwaggerDocument.FromUrlAsync("https://goldennumber.aiedu.msra.cn/swagger/v1%20-%20English/swagger.json");

            var settings = new SwaggerToCSharpClientGeneratorSettings
            {
                ClassName = "GoldenNumberService",
                CSharpGeneratorSettings =
                {
                    Namespace = "GoldenNumber"
                }
            };

            var generator = new SwaggerToCSharpClientGenerator(document, settings);
            var code      = generator.GenerateFile();

            var copyright = "// Copyright (c) Microsoft. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\r\n\r\n";

            File.WriteAllText("GoldenNumberService.cs", copyright + code.Replace("\r\n", "\n").Replace("\n", "\r\n"));
        }
예제 #23
0
 protected async Task <SwaggerDocument> ReadSwaggerDocumentAsync(string input)
 {
     if (!IsJson(input) && !IsYaml(input))
     {
         if (input.StartsWith("http://") || input.StartsWith("https://"))
         {
             if (input.EndsWith(".yaml", StringComparison.OrdinalIgnoreCase) ||
                 input.EndsWith(".yml", StringComparison.OrdinalIgnoreCase))
             {
                 return(await SwaggerYamlDocument.FromUrlAsync(input).ConfigureAwait(false));
             }
             else
             {
                 return(await SwaggerDocument.FromUrlAsync(input).ConfigureAwait(false));
             }
         }
         else
         {
             if (input.EndsWith(".yaml", StringComparison.OrdinalIgnoreCase) ||
                 input.EndsWith(".yml", StringComparison.OrdinalIgnoreCase))
             {
                 return(await SwaggerYamlDocument.FromFileAsync(input).ConfigureAwait(false));
             }
             else
             {
                 return(await SwaggerDocument.FromFileAsync(input).ConfigureAwait(false));
             }
         }
     }
     else
     {
         if (IsYaml(input))
         {
             return(await SwaggerYamlDocument.FromYamlAsync(input).ConfigureAwait(false));
         }
         else
         {
             return(await SwaggerDocument.FromJsonAsync(input).ConfigureAwait(false));
         }
     }
 }
예제 #24
0
        public static void Main(string[] args)
        {
            var document = SwaggerDocument.FromUrlAsync("http://*****:*****@"..\..\..\..\Squidex.ClientLibrary\Management\Generated.cs", code);
        }
예제 #25
0
        private async Task <Dictionary <string, SwaggerDocument> > GetDownstreamSwaggerDocuments(
            OcelotSwaggerSettings settings, Configuration ocelotConfiguration)
        {
            var dic = new Dictionary <string, SwaggerDocument>();

            var downstreamHosts = ocelotConfiguration.ReRoutes
                                  .SelectMany(x => x.DownstreamHostAndPorts);

            foreach (var host in downstreamHosts)
            {
                if (dic.ContainsKey(host.ToUrl()))
                {
                    continue;
                }

                // var swaggerDocumentUrl = $"{host.ToUrl()}/swagger/v1/swagger.json";
                var swaggerDocumentUrl = string.Format(settings.Settings.SwaggerUrl, host.ToUrl());

                var downstreamSwaggerDocument = settings.DownstreamSwaggers
                                                .FirstOrDefault(x => string.Compare(x.Host, host.ToUrl(), StringComparison.OrdinalIgnoreCase) == 0);
                if (downstreamSwaggerDocument != null)
                {
                    swaggerDocumentUrl = downstreamSwaggerDocument.SwaggerUrl;
                }

                try
                {
                    var document = await SwaggerDocument.FromUrlAsync(swaggerDocumentUrl);

                    dic.Add(host.ToUrl(), document);
                }
                catch (Exception ex)
                {
                    Log(ex);
                }
            }

            return(dic);
        }
예제 #26
0
        private async void GenerateTypescriptApiClient()
        {
            try
            {
                var document = await SwaggerDocument.FromUrlAsync("http://localhost:30000/swagger/v1/swagger.json");

                var settings = new SwaggerToTypeScriptClientGeneratorSettings
                {
                    ClassName                  = "{controller}Client",
                    GenerateClientClasses      = true,
                    GenerateOptionalParameters = true,
                    GenerateResponseClasses    = true,
                };

                var generator = new SwaggerToTypeScriptClientGenerator(document, settings);
                var code      = generator.GenerateFile();

                File.WriteAllText("TypescriptApiClient.ts", code);
            }
            catch (Exception ex)
            {
            }
        }
예제 #27
0
 /// <summary>Loads the Swagger spec.</summary>
 public async Task <SwaggerDocument> RunAsync()
 {
     if (!string.IsNullOrEmpty(Swagger))
     {
         if (Swagger.StartsWith("{"))
         {
             return(await SwaggerDocument.FromJsonAsync(Swagger).ConfigureAwait(false));
         }
         else
         {
             return(await SwaggerYamlDocument.FromYamlAsync(Swagger).ConfigureAwait(false));
         }
     }
     else if (Url.StartsWith("http://") || Url.StartsWith("https://"))
     {
         if (Url.EndsWith(".yaml", StringComparison.OrdinalIgnoreCase))
         {
             return(await SwaggerYamlDocument.FromUrlAsync(Url).ConfigureAwait(false));
         }
         else
         {
             return(await SwaggerDocument.FromUrlAsync(Url).ConfigureAwait(false));
         }
     }
     else
     {
         if (Url.EndsWith(".yaml", StringComparison.OrdinalIgnoreCase))
         {
             return(await SwaggerYamlDocument.FromFileAsync(Url).ConfigureAwait(false));
         }
         else
         {
             return(await SwaggerDocument.FromFileAsync(Url).ConfigureAwait(false));
         }
     }
 }
예제 #28
0
 /// <summary>
 /// Fetch Swagger document from swagger file path or Uri.
 /// </summary>
 /// <remarks>
 /// FilePath takes precidence over Uri
 /// </remarks>
 private void FetchSwaggerDocument()
 {
     Document = Task.Run(() => !string.IsNullOrEmpty(_settings.ApiSpecPath)
         ? SwaggerDocument.FromFileAsync(_settings.ApiSpecPath)
         : SwaggerDocument.FromUrlAsync(_settings.ApiSpecUri)).GetAwaiter().GetResult();
 }