diff --git a/Rest.Net.Example/Client.cs b/Rest.Net.Example/Client.cs index c7f3308..aa16772 100644 --- a/Rest.Net.Example/Client.cs +++ b/Rest.Net.Example/Client.cs @@ -1,3 +1,4 @@ +//Generated using MontoyaTech.Rest.Net using System; using System.Net; using System.Net.Http; @@ -9,7 +10,7 @@ public class Client public CookieContainer CookieContainer; - public HttpClientHandler ClientHandler; + public HttpMessageHandler MessageHandler; public HttpClient HttpClient; @@ -19,7 +20,7 @@ public class Client public StreamApi Stream; - public Client(string baseUrl) + public Client(string baseUrl, HttpMessageHandler handler = null) { if (string.IsNullOrWhiteSpace(baseUrl)) throw new ArgumentException("baseUrl must not be null or whitespace."); @@ -31,15 +32,20 @@ public class Client this.CookieContainer = new CookieContainer(); - this.ClientHandler = new HttpClientHandler() + if (handler == null) { - AllowAutoRedirect = true, - UseCookies = true, - CookieContainer = this.CookieContainer, - AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate - }; + handler = new HttpClientHandler() + { + AllowAutoRedirect = true, + UseCookies = true, + CookieContainer = this.CookieContainer, + AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate + }; + } - this.HttpClient = new HttpClient(this.ClientHandler); + this.MessageHandler = handler; + + this.HttpClient = new HttpClient(handler); this.HttpClient.DefaultRequestHeaders.Add("Accept", "*/*"); @@ -67,7 +73,7 @@ public class Client { var message = new HttpRequestMessage(HttpMethod.Get, $"{this.Client.BaseUrl}/status"); - var response = this.Client.HttpClient.Send(message); + var response = this.Client.HttpClient.Send(message, HttpCompletionOption.ResponseHeadersRead); if (response.IsSuccessStatusCode) { @@ -88,7 +94,7 @@ public class Client { var message = new HttpRequestMessage(HttpMethod.Post, $"{this.Client.BaseUrl}/add/{a}/{b}"); - var response = this.Client.HttpClient.Send(message); + var response = this.Client.HttpClient.Send(message, HttpCompletionOption.ResponseHeadersRead); if (response.IsSuccessStatusCode) { @@ -109,7 +115,7 @@ public class Client { var message = new HttpRequestMessage(HttpMethod.Get, $"{this.Client.BaseUrl}/compress"); - var response = this.Client.HttpClient.Send(message); + var response = this.Client.HttpClient.Send(message, HttpCompletionOption.ResponseHeadersRead); if (response.IsSuccessStatusCode) { @@ -130,7 +136,7 @@ public class Client { var message = new HttpRequestMessage(HttpMethod.Get, $"{this.Client.BaseUrl}/file/compress"); - var response = this.Client.HttpClient.Send(message); + var response = this.Client.HttpClient.Send(message, HttpCompletionOption.ResponseHeadersRead); if (response.IsSuccessStatusCode) { @@ -161,7 +167,7 @@ public class Client { var message = new HttpRequestMessage(HttpMethod.Get, $"{this.Client.BaseUrl}/auth/{name}"); - var response = this.Client.HttpClient.Send(message); + var response = this.Client.HttpClient.Send(message, HttpCompletionOption.ResponseHeadersRead); if (response.IsSuccessStatusCode) { @@ -184,7 +190,7 @@ public class Client message.Content = new StringContent(JsonConvert.SerializeObject(request)); - var response = this.Client.HttpClient.Send(message); + var response = this.Client.HttpClient.Send(message, HttpCompletionOption.ResponseHeadersRead); if (!response.IsSuccessStatusCode) throw new Exception("Unexpected Http Response StatusCode:" + response.StatusCode); @@ -194,7 +200,7 @@ public class Client { var message = new HttpRequestMessage(HttpMethod.Get, $"{this.Client.BaseUrl}/auth"); - var response = this.Client.HttpClient.Send(message); + var response = this.Client.HttpClient.Send(message, HttpCompletionOption.ResponseHeadersRead); if (response.IsSuccessStatusCode) { @@ -215,7 +221,7 @@ public class Client { var message = new HttpRequestMessage(HttpMethod.Get, $"{this.Client.BaseUrl}/auth/role"); - var response = this.Client.HttpClient.Send(message); + var response = this.Client.HttpClient.Send(message, HttpCompletionOption.ResponseHeadersRead); if (response.IsSuccessStatusCode) { @@ -250,7 +256,7 @@ public class Client message.Content = new StreamContent(request); - var response = this.Client.HttpClient.Send(message); + var response = this.Client.HttpClient.Send(message, HttpCompletionOption.ResponseHeadersRead); if (!response.IsSuccessStatusCode) throw new Exception("Unexpected Http Response StatusCode:" + response.StatusCode); @@ -260,15 +266,13 @@ public class Client { var message = new HttpRequestMessage(HttpMethod.Get, $"{this.Client.BaseUrl}/download"); - var response = this.Client.HttpClient.Send(message); + var response = this.Client.HttpClient.Send(message, HttpCompletionOption.ResponseHeadersRead); if (response.IsSuccessStatusCode) { var stream = new System.IO.MemoryStream(); - response.Content.ReadAsStream().CopyTo(stream); - - stream.Seek(0, System.IO.SeekOrigin.Begin); + response.Content.CopyToAsync(stream).GetAwaiter().GetResult(); return stream; } @@ -282,6 +286,18 @@ public class Client public class IncludedType { public int Test; + + public IncludedType() { } + + public IncludedType(IncludedType instance) + { + this.Test = instance.Test; + } + + public IncludedType(int Test = 0) + { + this.Test = Test; + } } public class UserDto : BaseUser @@ -292,23 +308,79 @@ public class Client public System.Collections.Generic.List List; + public System.String[] Array; + public ulong Property { get; set; } + + public UserDto() { } + + public UserDto(UserDto instance) + { + this.MachineType = instance.MachineType; + this.Name = instance.Name; + this.List = instance.List; + this.Array = instance.Array; + this.Property = instance.Property; + } + + public UserDto(System.PlatformID MachineType = 0, string Name = null, System.Collections.Generic.List List = null, System.String[] Array = null, ulong Property = 0) + { + this.MachineType = MachineType; + this.Name = Name; + this.List = List; + this.Array = Array; + this.Property = Property; + } } public class BaseUser { public string Id; + public char FirstInitial; + public System.Collections.Generic.List Permissions; public UserRole Role { get; set; } + public BaseUser() { } + + public BaseUser(BaseUser instance) + { + this.Id = instance.Id; + this.FirstInitial = instance.FirstInitial; + this.Permissions = instance.Permissions; + this.Role = instance.Role; + } + + public BaseUser(string Id = null, char FirstInitial = '\0', System.Collections.Generic.List Permissions = null, UserRole Role = 0) + { + this.Id = Id; + this.FirstInitial = FirstInitial; + this.Permissions = Permissions; + this.Role = Role; + } + public class Permission { public string Name; public Types Type; + public Permission() { } + + public Permission(Permission instance) + { + this.Name = instance.Name; + this.Type = instance.Type; + } + + public Permission(string Name = null, Types Type = 0) + { + this.Name = Name; + this.Type = Type; + } + public enum Types : int { Read = 0, diff --git a/Rest.Net.Example/Client.Static.cs b/Rest.Net.Example/StaticClient.cs similarity index 94% rename from Rest.Net.Example/Client.Static.cs rename to Rest.Net.Example/StaticClient.cs index 7d7d496..44963fc 100644 --- a/Rest.Net.Example/Client.Static.cs +++ b/Rest.Net.Example/StaticClient.cs @@ -10,11 +10,11 @@ public class StaticClient public static CookieContainer CookieContainer; - public static HttpClientHandler ClientHandler; + public static HttpMessageHandler MessageHandler; public static HttpClient HttpClient; - public static void Init(string baseUrl) + public static void Init(string baseUrl, HttpMessageHandler handler = null) { if (string.IsNullOrWhiteSpace(baseUrl)) throw new ArgumentException("baseUrl must not be null or whitespace."); @@ -26,15 +26,20 @@ public class StaticClient StaticClient.CookieContainer = new CookieContainer(); - StaticClient.ClientHandler = new HttpClientHandler() + if (handler == null) { - AllowAutoRedirect = true, - UseCookies = true, - CookieContainer = StaticClient.CookieContainer, - AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate - }; + handler = new HttpClientHandler() + { + AllowAutoRedirect = true, + UseCookies = true, + CookieContainer = StaticClient.CookieContainer, + AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate + }; + } - StaticClient.HttpClient = new HttpClient(StaticClient.ClientHandler); + StaticClient.MessageHandler = handler; + + StaticClient.HttpClient = new HttpClient(handler); StaticClient.HttpClient.DefaultRequestHeaders.Add("Accept", "*/*"); diff --git a/Rest.Net/Rest.Net.csproj b/Rest.Net/Rest.Net.csproj index 0cab141..aeab170 100644 --- a/Rest.Net/Rest.Net.csproj +++ b/Rest.Net/Rest.Net.csproj @@ -17,7 +17,7 @@ MontoyaTech.Rest.Net MontoyaTech.Rest.Net True - 1.5.8 + 1.5.9 Logo_Symbol_Black_Outline.png diff --git a/Rest.Net/RestCSharpClientGenerator.cs b/Rest.Net/RestCSharpClientGenerator.cs index b1c9e94..b3030f0 100644 --- a/Rest.Net/RestCSharpClientGenerator.cs +++ b/Rest.Net/RestCSharpClientGenerator.cs @@ -56,9 +56,9 @@ namespace MontoyaTech.Rest.Net //Create the client handler field if (this.StaticCode) - writer.WriteBreak().WriteLine("public static HttpClientHandler ClientHandler;"); + writer.WriteBreak().WriteLine("public static HttpMessageHandler MessageHandler;"); else - writer.WriteBreak().WriteLine("public HttpClientHandler ClientHandler;"); + writer.WriteBreak().WriteLine("public HttpMessageHandler MessageHandler;"); //Create the http client field if (this.StaticCode) @@ -74,7 +74,7 @@ namespace MontoyaTech.Rest.Net //Create the client constructor or init method if (this.StaticCode) { - writer.WriteBreak().WriteLine("public static void Init(string baseUrl)").WriteLine("{").Indent(); + writer.WriteBreak().WriteLine("public static void Init(string baseUrl, HttpMessageHandler handler = null)").WriteLine("{").Indent(); //Make sure the base url isn't null or whitespace writer.WriteBreak().WriteLine("if (string.IsNullOrWhiteSpace(baseUrl))"); @@ -91,16 +91,22 @@ namespace MontoyaTech.Rest.Net writer.WriteBreak().WriteLine($"{this.ClientName}.CookieContainer = new CookieContainer();"); //Init the client handler - writer.WriteBreak().WriteLine($"{this.ClientName}.ClientHandler = new HttpClientHandler()"); + writer.WriteBreak().WriteLine("if (handler == null)"); + writer.WriteLine("{").Indent(); + writer.WriteLine($"handler = 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("};"); + writer.Outdent().WriteLine("}"); + + //Store the message handler + writer.WriteBreak().WriteLine($"{this.ClientName}.MessageHandler = handler;"); //Init the http client - writer.WriteBreak().WriteLine($"{this.ClientName}.HttpClient = new HttpClient({this.ClientName}.ClientHandler);"); + writer.WriteBreak().WriteLine($"{this.ClientName}.HttpClient = new HttpClient(handler);"); 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"");"); @@ -109,7 +115,7 @@ namespace MontoyaTech.Rest.Net } else { - writer.WriteBreak().WriteLine("public Client(string baseUrl)").WriteLine("{").Indent(); + writer.WriteBreak().WriteLine("public Client(string baseUrl, HttpMessageHandler handler = null)").WriteLine("{").Indent(); //Make sure the base url isn't null or whitespace writer.WriteBreak().WriteLine("if (string.IsNullOrWhiteSpace(baseUrl))"); @@ -126,16 +132,22 @@ namespace MontoyaTech.Rest.Net writer.WriteBreak().WriteLine("this.CookieContainer = new CookieContainer();"); //Init the client handler - writer.WriteBreak().WriteLine("this.ClientHandler = new HttpClientHandler()"); + writer.WriteBreak().WriteLine("if (handler == null)"); + writer.WriteLine("{").Indent(); + writer.WriteLine("handler = 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("};"); + writer.Outdent().WriteLine("}"); + + //Store the message handler + writer.WriteBreak().WriteLine("this.MessageHandler = handler;"); //Init the http client - writer.WriteBreak().WriteLine("this.HttpClient = new HttpClient(this.ClientHandler);"); + writer.WriteBreak().WriteLine("this.HttpClient = new HttpClient(handler);"); 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"");");