From eadbe85bce7b43ba88d0c7e2f4b87f6b8c8de884 Mon Sep 17 00:00:00 2001 From: Christophe CHATEAU Date: Thu, 12 Mar 2026 02:33:51 +0100 Subject: [PATCH 1/2] Update SimpleWServer.csproj update nuget package --- src/Servers/SimpleWServer/SimpleWServer.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Servers/SimpleWServer/SimpleWServer.csproj b/src/Servers/SimpleWServer/SimpleWServer.csproj index 7c5e806..aaa9179 100644 --- a/src/Servers/SimpleWServer/SimpleWServer.csproj +++ b/src/Servers/SimpleWServer/SimpleWServer.csproj @@ -7,7 +7,7 @@ - + From e85556e904f64be0cb3cc1781cc4bea8726786e7 Mon Sep 17 00:00:00 2001 From: Christophe CHATEAU Date: Thu, 12 Mar 2026 02:35:43 +0100 Subject: [PATCH 2/2] Update Program.cs update Program.cs --- src/Servers/SimpleWServer/Program.cs | 63 +++++++++++++--------------- 1 file changed, 29 insertions(+), 34 deletions(-) diff --git a/src/Servers/SimpleWServer/Program.cs b/src/Servers/SimpleWServer/Program.cs index 80e8340..aebabc3 100644 --- a/src/Servers/SimpleWServer/Program.cs +++ b/src/Servers/SimpleWServer/Program.cs @@ -1,51 +1,46 @@ using System.Net; using SimpleW; +using SimpleW.Observability; -var port = args.Length > 0 && int.TryParse(args[0], out var p) ? p : 8080; +// logs +Log.SetSink(Log.ConsoleWriteLine, LogLevel.Trace); +var port = args.Length > 0 && int.TryParse(args[0], out var p) ? p : 8080; var server = new SimpleWServer(IPAddress.Any, port); +// default +server.MapGet("/", () => "OK"); +server.Map("HEAD", "/", () => "OK"); +server.Map("OPTIONS", "/", (HttpSession session) => { + return session.Response.AddHeader("Allow", "GET, HEAD, POST, OPTIONS") + .Text("OK"); +}); + +// post +server.MapPost("/", (HttpSession session) => session.Response.Text(session.Request.BodyString)); + +// echo +server.MapGet("/echo", (HttpSession session) => Echo(session)); +server.MapPost("/echo", (HttpSession session) => Echo(session)); +// cookie server.MapGet("/cookie", (HttpSession session) => ParseCookies(session)); server.MapPost("/cookie", (HttpSession session) => ParseCookies(session)); -server.MapGet("/echo", (HttpSession session) => -{ - var sb = new System.Text.StringBuilder(); - foreach (var h in session.Request.Headers.EnumerateAll()) - sb.AppendLine($"{h.Key}: {h.Value}"); - return sb.ToString(); -}); -server.MapPost("/echo", (HttpSession session) => -{ + +static HttpResponse Echo(HttpSession session) { var sb = new System.Text.StringBuilder(); - foreach (var h in session.Request.Headers.EnumerateAll()) + foreach (var h in session.Request.Headers.EnumerateAll()) { sb.AppendLine($"{h.Key}: {h.Value}"); - return sb.ToString(); -}); -server.MapGet("/", () => "OK"); -server.MapGet("/{path}", () => "OK"); -server.MapPost("/", (HttpSession session) => session.Request.BodyString); -server.MapPost("/{path}", (HttpSession session) => session.Request.BodyString); + } + return session.Response.Text(sb.ToString()); +} -static string ParseCookies(HttpSession session) -{ +static HttpResponse ParseCookies(HttpSession session) { var sb = new System.Text.StringBuilder(); - foreach (var h in session.Request.Headers.EnumerateAll()) - { - if (string.Equals(h.Key, "Cookie", StringComparison.OrdinalIgnoreCase)) - { - foreach (var pair in h.Value.Split(';')) - { - var trimmed = pair.TrimStart(); - var eqIdx = trimmed.IndexOf('='); - if (eqIdx > 0) - sb.AppendLine($"{trimmed[..eqIdx]}={trimmed[(eqIdx + 1)..]}"); - } - } + foreach (var pair in session.Request.Headers.EnumerateCookies()) { + sb.AppendLine($"{pair.Key}={pair.Value}"); } - return sb.ToString(); + return session.Response.Text(sb.ToString()); } -Console.WriteLine($"SimpleW listening on http://localhost:{port}"); - await server.RunAsync();