Improved the csharp client generator to check if the base url is null or whitespace and to remove trailing / characters. Fixed some bugs with different client names. Generator also now sets up cookie support.
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
<AssemblyName>MontoyaTech.Rest.Net</AssemblyName>
|
||||
<RootNamespace>MontoyaTech.Rest.Net</RootNamespace>
|
||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||
<Version>1.2.6</Version>
|
||||
<Version>1.2.7</Version>
|
||||
<PackageReleaseNotes></PackageReleaseNotes>
|
||||
<PackageIcon>Logo_Symbol_Black_Outline.png</PackageIcon>
|
||||
</PropertyGroup>
|
||||
|
@@ -46,16 +46,31 @@ namespace MontoyaTech.Rest.Net
|
||||
var writer = new CodeWriter();
|
||||
|
||||
writer.WriteLine("using System;");
|
||||
writer.WriteLine("using System.Net;");
|
||||
writer.WriteLine("using System.Net.Http;");
|
||||
writer.WriteLine("using Newtonsoft.Json;");
|
||||
|
||||
writer.WriteBreak().WriteLine($"public class {this.ClientName}").WriteLine("{").Indent();
|
||||
|
||||
//Create the base url field
|
||||
if (this.StaticCode)
|
||||
writer.WriteBreak().WriteLine("public static string BaseUrl;");
|
||||
else
|
||||
writer.WriteBreak().WriteLine("public string BaseUrl;");
|
||||
|
||||
//Create the cookie container field
|
||||
if (this.StaticCode)
|
||||
writer.WriteBreak().WriteLine("public static CookieContainer CookieContainer;");
|
||||
else
|
||||
writer.WriteBreak().WriteLine("public CookieContainer CookieContainer;");
|
||||
|
||||
//Create the client handler field
|
||||
if (this.StaticCode)
|
||||
writer.WriteBreak().WriteLine("public static HttpClientHandler ClientHandler;");
|
||||
else
|
||||
writer.WriteBreak().WriteLine("public HttpClientHandler ClientHandler;");
|
||||
|
||||
//Create the http client field
|
||||
if (this.StaticCode)
|
||||
writer.WriteBreak().WriteLine("public static HttpClient HttpClient;");
|
||||
else
|
||||
@@ -71,14 +86,34 @@ namespace MontoyaTech.Rest.Net
|
||||
{
|
||||
writer.WriteBreak().WriteLine("public static void Init(string baseUrl)").WriteLine("{").Indent();
|
||||
|
||||
//Make sure the base url isn't null or whitespace
|
||||
writer.WriteBreak().WriteLine("if (string.IsNullOrWhiteSpace(baseUrl))");
|
||||
writer.Indent().WriteLine(@"throw new ArgumentException(""baseUrl must not be null or whitespace."");").Outdent();
|
||||
|
||||
//If the baseUrl ends with a /, remove it.
|
||||
writer.WriteBreak().WriteLine("if (baseUrl.EndsWith('/'))");
|
||||
writer.Indent().WriteLine("baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);").Outdent();
|
||||
|
||||
//Init the base url
|
||||
writer.WriteLine($"{this.ClientName}.BaseUrl = baseUrl;");
|
||||
writer.WriteBreak().WriteLine($"{this.ClientName}.BaseUrl = baseUrl;");
|
||||
|
||||
//Init the cookie container
|
||||
writer.WriteBreak().WriteLine($"{this.ClientName}.CookieContainer = new CookieContainer();");
|
||||
|
||||
//Init the client handler
|
||||
writer.WriteBreak().WriteLine($"{this.ClientName}.ClientHandler = new HttpClientHandler()");
|
||||
writer.WriteLine("{").Indent();
|
||||
writer.WriteLine("AllowAutoRedirect = true,");
|
||||
writer.WriteLine("UseCookies = true,");
|
||||
writer.WriteLine($"CookieContainer = {this.ClientName}.CookieContainer,");
|
||||
writer.WriteLine("AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate");
|
||||
writer.Outdent().WriteLine("};");
|
||||
|
||||
//Init the http client
|
||||
writer.WriteLine($"{this.ClientName}.HttpClient = new HttpClient();");
|
||||
writer.WriteLine(@$"{this.ClientName}.HttpClient.DefaultRequestHeaders.Add(""Accept"", ""*/*"");");
|
||||
writer.WriteLine(@$"{this.ClientName}.HttpClient.DefaultRequestHeaders.Add(""Connection"", ""keep-alive"");");
|
||||
writer.WriteLine(@$"{this.ClientName}.HttpClient.DefaultRequestHeaders.Add(""Accept-Encoding"", ""identity"");");
|
||||
writer.WriteBreak().WriteLine($"{this.ClientName}.HttpClient = new HttpClient({this.ClientName}.ClientHandler);");
|
||||
writer.WriteBreak().WriteLine(@$"{this.ClientName}.HttpClient.DefaultRequestHeaders.Add(""Accept"", ""*/*"");");
|
||||
writer.WriteBreak().WriteLine(@$"{this.ClientName}.HttpClient.DefaultRequestHeaders.Add(""Connection"", ""keep-alive"");");
|
||||
writer.WriteBreak().WriteLine(@$"{this.ClientName}.HttpClient.DefaultRequestHeaders.Add(""Accept-Encoding"", ""identity"");");
|
||||
|
||||
writer.Outdent().WriteLine("}");
|
||||
}
|
||||
@@ -86,18 +121,38 @@ namespace MontoyaTech.Rest.Net
|
||||
{
|
||||
writer.WriteBreak().WriteLine("public Client(string baseUrl)").WriteLine("{").Indent();
|
||||
|
||||
//Make sure the base url isn't null or whitespace
|
||||
writer.WriteBreak().WriteLine("if (string.IsNullOrWhiteSpace(baseUrl))");
|
||||
writer.Indent().WriteLine(@"throw new ArgumentException(""baseUrl must not be null or whitespace."");").Outdent();
|
||||
|
||||
//If the baseUrl ends with a /, remove it.
|
||||
writer.WriteBreak().WriteLine("if (baseUrl.EndsWith('/'))");
|
||||
writer.Indent().WriteLine("baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);").Outdent();
|
||||
|
||||
//Init the base url
|
||||
writer.WriteLine("this.BaseUrl = baseUrl;");
|
||||
writer.WriteBreak().WriteLine("this.BaseUrl = baseUrl;");
|
||||
|
||||
//Init the cookie container
|
||||
writer.WriteBreak().WriteLine("this.CookieContainer = new CookieContainer();");
|
||||
|
||||
//Init the client handler
|
||||
writer.WriteBreak().WriteLine("this.ClientHandler = new HttpClientHandler()");
|
||||
writer.WriteLine("{").Indent();
|
||||
writer.WriteLine("AllowAutoRedirect = true,");
|
||||
writer.WriteLine("UseCookies = true,");
|
||||
writer.WriteLine("CookieContainer = this.CookieContainer,");
|
||||
writer.WriteLine("AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate");
|
||||
writer.Outdent().WriteLine("};");
|
||||
|
||||
//Init the http client
|
||||
writer.WriteBreak().WriteLine("this.HttpClient = new HttpClient(this.ClientHandler);");
|
||||
writer.WriteBreak().WriteLine(@"this.HttpClient.DefaultRequestHeaders.Add(""Accept"", ""*/*"");");
|
||||
writer.WriteBreak().WriteLine(@"this.HttpClient.DefaultRequestHeaders.Add(""Connection"", ""keep-alive"");");
|
||||
writer.WriteBreak().WriteLine(@"this.HttpClient.DefaultRequestHeaders.Add(""Accept-Encoding"", ""identity"");");
|
||||
|
||||
//Init all the route group fields
|
||||
foreach (var group in routeGroups)
|
||||
writer.WriteLine($"this.{group.Key} = new {group.Key}Api(this);");
|
||||
|
||||
//Init the http client
|
||||
writer.WriteLine("this.HttpClient = new HttpClient();");
|
||||
writer.WriteLine(@"this.HttpClient.DefaultRequestHeaders.Add(""Accept"", ""*/*"");");
|
||||
writer.WriteLine(@"this.HttpClient.DefaultRequestHeaders.Add(""Connection"", ""keep-alive"");");
|
||||
writer.WriteLine(@"this.HttpClient.DefaultRequestHeaders.Add(""Accept-Encoding"", ""identity"");");
|
||||
writer.WriteBreak().WriteLine($"this.{group.Key} = new {group.Key}Api(this);");
|
||||
|
||||
writer.Outdent().WriteLine("}");
|
||||
}
|
||||
@@ -301,7 +356,7 @@ namespace MontoyaTech.Rest.Net
|
||||
}
|
||||
|
||||
if (this.StaticCode)
|
||||
writer.WriteSeparator().Write('$').Write('"').Write("{Client.BaseUrl}");
|
||||
writer.WriteSeparator().Write('$').Write('"').Write($"{{{this.ClientName}.BaseUrl}}");
|
||||
else
|
||||
writer.WriteSeparator().Write('$').Write('"').Write("{this.Client.BaseUrl}");
|
||||
|
||||
@@ -346,14 +401,14 @@ namespace MontoyaTech.Rest.Net
|
||||
|
||||
//Generate the response code
|
||||
if (this.StaticCode)
|
||||
writer.WriteBreak().WriteLine("var response = Client.HttpClient.Send(message);");
|
||||
writer.WriteBreak().WriteLine($"var response = {this.ClientName}.HttpClient.Send(message);");
|
||||
else
|
||||
writer.WriteBreak().WriteLine("var response = this.Client.HttpClient.Send(message);");
|
||||
|
||||
//Handle the response
|
||||
if (routeResponse != null)
|
||||
{
|
||||
writer.WriteBreak().WriteLine("if (response.StatusCode == System.Net.HttpStatusCode.OK)").Indent();
|
||||
writer.WriteBreak().WriteLine("if (response.StatusCode == HttpStatusCode.OK)").Indent();
|
||||
|
||||
if (routeResponse.Json)
|
||||
{
|
||||
@@ -433,7 +488,7 @@ namespace MontoyaTech.Rest.Net
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteBreak().WriteLine("if (response.StatusCode != System.Net.HttpStatusCode.OK)").Indent();
|
||||
writer.WriteBreak().WriteLine("if (response.StatusCode != HttpStatusCode.OK)").Indent();
|
||||
writer.WriteLine(@"throw new Exception(""Unexpected Http Response StatusCode:"" + response.StatusCode);").Outdent();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user