Modifying client generator to allow modifying requests before they are sent.

This commit is contained in:
2024-02-19 08:05:48 -08:00
parent 50861d5381
commit 8747b5fb3e
5 changed files with 114 additions and 16 deletions

View File

@@ -33,7 +33,7 @@ namespace MontoyaTech.Rest.Net
var writer = new CodeWriter();
writer.WriteLine("//Generated using MontoyaTech.Rest.Net");
writer.WriteLine($"//Generated using MontoyaTech.Rest.Net - {DateTime.Now.ToShortDateString()}");
writer.WriteBreak().WriteLine($"public class {this.ClientName}").WriteLine("{").Indent();
@@ -61,6 +61,12 @@ namespace MontoyaTech.Rest.Net
else
writer.WriteBreak().WriteLine("public System.Net.Http.HttpClient HttpClient;");
//Create the request handler field
if (this.StaticCode)
writer.WriteBreak().WriteLine("public static System.Action<System.Net.Http.HttpRequestMessage> RequestHandler;");
else
writer.WriteBreak().WriteLine("public System.Action<System.Net.Http.HttpRequestMessage> RequestHandler;");
//Create fields foreach route group so they can be accessed.
if (!this.StaticCode)
foreach (var group in routeGroups)
@@ -69,7 +75,7 @@ namespace MontoyaTech.Rest.Net
//Create the client constructor or init method
if (this.StaticCode)
{
writer.WriteBreak().WriteLine("public static void Init(string baseUrl, System.Net.Http.HttpMessageHandler handler = null)").WriteLine("{").Indent();
writer.WriteBreak().WriteLine("public static void Init(string baseUrl, System.Net.Http.HttpMessageHandler messageHandler = null, System.Action<System.Net.Http.HttpRequestMessage> requestHandler = null)").WriteLine("{").Indent();
//Make sure the base url isn't null or whitespace
writer.WriteBreak().WriteLine("if (string.IsNullOrWhiteSpace(baseUrl))");
@@ -86,9 +92,9 @@ namespace MontoyaTech.Rest.Net
writer.WriteBreak().WriteLine($"{this.ClientName}.CookieContainer = new System.Net.CookieContainer();");
//Init the client handler
writer.WriteBreak().WriteLine("if (handler == null)");
writer.WriteBreak().WriteLine("if (messageHandler == null)");
writer.WriteLine("{").Indent();
writer.WriteLine($"handler = new System.Net.Http.HttpClientHandler()");
writer.WriteLine($"messageHandler = new System.Net.Http.HttpClientHandler()");
writer.WriteLine("{").Indent();
writer.WriteLine("AllowAutoRedirect = true,");
writer.WriteLine("UseCookies = true,");
@@ -98,7 +104,10 @@ namespace MontoyaTech.Rest.Net
writer.Outdent().WriteLine("}");
//Store the message handler
writer.WriteBreak().WriteLine($"{this.ClientName}.MessageHandler = handler;");
writer.WriteBreak().WriteLine($"{this.ClientName}.MessageHandler = messageHandler;");
//Store the request handler
writer.WriteBreak().WriteLine($"{this.ClientName}.RequestHandler = requestHandler;");
//Init the http client
writer.WriteBreak().WriteLine($"{this.ClientName}.HttpClient = new System.Net.Http.HttpClient(handler);");
@@ -110,7 +119,7 @@ namespace MontoyaTech.Rest.Net
}
else
{
writer.WriteBreak().WriteLine($"public {this.ClientName}(string baseUrl, System.Net.Http.HttpMessageHandler handler = null)").WriteLine("{").Indent();
writer.WriteBreak().WriteLine($"public {this.ClientName}(string baseUrl, System.Net.Http.HttpMessageHandler messageHandler = null, System.Action<System.Net.Http.HttpRequestMessage> requestHandler = null)").WriteLine("{").Indent();
//Make sure the base url isn't null or whitespace
writer.WriteBreak().WriteLine("if (string.IsNullOrWhiteSpace(baseUrl))");
@@ -127,9 +136,9 @@ namespace MontoyaTech.Rest.Net
writer.WriteBreak().WriteLine("this.CookieContainer = new System.Net.CookieContainer();");
//Init the client handler
writer.WriteBreak().WriteLine("if (handler == null)");
writer.WriteBreak().WriteLine("if (messageHandler == null)");
writer.WriteLine("{").Indent();
writer.WriteLine("handler = new System.Net.Http.HttpClientHandler()");
writer.WriteLine("messageHandler = new System.Net.Http.HttpClientHandler()");
writer.WriteLine("{").Indent();
writer.WriteLine("AllowAutoRedirect = true,");
writer.WriteLine("UseCookies = true,");
@@ -139,7 +148,10 @@ namespace MontoyaTech.Rest.Net
writer.Outdent().WriteLine("}");
//Store the message handler
writer.WriteBreak().WriteLine("this.MessageHandler = handler;");
writer.WriteBreak().WriteLine("this.MessageHandler = messageHandler;");
//Store the request handler
writer.WriteBreak().WriteLine("this.RequestHandler = requestHandler;");
//Init the http client
writer.WriteBreak().WriteLine("this.HttpClient = new System.Net.Http.HttpClient(handler);");
@@ -491,6 +503,12 @@ namespace MontoyaTech.Rest.Net
writer.Write('"').WriteLine(");");
//Invoke the request handler if needed.
if (this.StaticCode)
writer.WriteBreak().WriteLine($"{this.ClientName}.RequestHandler?.Invoke(message);");
else
writer.WriteBreak().WriteLine($"this.Client.RequestHandler?.Invoke(message);");
//Add the request content if any.
if (routeRequest != null)
{

View File

@@ -33,7 +33,7 @@ namespace MontoyaTech.Rest.Net
var writer = new CodeWriter();
writer.WriteLine("//Generated using MontoyaTech.Rest.Net");
writer.WriteLine($"//Generated using MontoyaTech.Rest.Net - {DateTime.Now.ToShortDateString()}");
writer.WriteBreak().WriteLine($"class {this.ClientName} {{").Indent();
@@ -49,6 +49,17 @@ namespace MontoyaTech.Rest.Net
writer.WriteLine("BaseUrl = null;");
}
//Create the request handler field.
if (this.StaticCode)
{
writer.WriteBreak().WriteLine("/** @type {Function} */");
}
else
{
writer.WriteBreak().WriteLine("/** @type {Function} */");
}
//Create fields foreach route group so they can be accessed.
if (!this.StaticCode)
{
@@ -67,7 +78,7 @@ namespace MontoyaTech.Rest.Net
writer.WriteLine("Initializes the api client with a given baseUrl of where to send requests.");
writer.WriteLine("@param {string} baseUrl");
writer.Outdent().WriteLine("*/");
writer.Write("static Init(baseUrl) ").WriteLine("{").Indent();
writer.Write("static Init(baseUrl, requestHandler) ").WriteLine("{").Indent();
//Make sure the baseUrl isn't null or whitespace
writer.WriteBreak().WriteLine("if (baseUrl == null || baseUrl == undefined || baseUrl.trim() == '') {").Indent();