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"); }
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); } }
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"); }
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); }); }
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); } }
private async Task <SwaggerDocument> GetSwaggerDocAsync() { if (string.IsNullOrWhiteSpace(SwaggerUrl)) { throw new Exception("No Swagger URL was provided."); } return(await SwaggerDocument.FromUrlAsync(SwaggerUrl)); }
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); }
// 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); }
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); }
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); }
/// <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); } }
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 }); }
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())); }
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")}\");"); }
/// <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)); } }
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()); }
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); }
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); }
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); }
/// <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); }
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")); }
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)); } } }
public static void Main(string[] args) { var document = SwaggerDocument.FromUrlAsync("http://*****:*****@"..\..\..\..\Squidex.ClientLibrary\Management\Generated.cs", code); }
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); }
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) { } }
/// <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)); } } }
/// <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(); }