|
1 | 1 | using System.Net; |
2 | 2 | using SimpleW; |
| 3 | +using SimpleW.Observability; |
3 | 4 |
|
4 | | -var port = args.Length > 0 && int.TryParse(args[0], out var p) ? p : 8080; |
| 5 | +// logs |
| 6 | +Log.SetSink(Log.ConsoleWriteLine, LogLevel.Trace); |
5 | 7 |
|
| 8 | +var port = args.Length > 0 && int.TryParse(args[0], out var p) ? p : 8080; |
6 | 9 | var server = new SimpleWServer(IPAddress.Any, port); |
7 | 10 |
|
| 11 | +// default |
| 12 | +server.MapGet("/", () => "OK"); |
| 13 | +server.Map("HEAD", "/", () => "OK"); |
| 14 | +server.Map("OPTIONS", "/", (HttpSession session) => { |
| 15 | + return session.Response.AddHeader("Allow", "GET, HEAD, POST, OPTIONS") |
| 16 | + .Text("OK"); |
| 17 | +}); |
| 18 | + |
| 19 | +// post |
| 20 | +server.MapPost("/", (HttpSession session) => session.Response.Text(session.Request.BodyString)); |
| 21 | + |
| 22 | +// echo |
| 23 | +server.MapGet("/echo", (HttpSession session) => Echo(session)); |
| 24 | +server.MapPost("/echo", (HttpSession session) => Echo(session)); |
8 | 25 |
|
| 26 | +// cookie |
9 | 27 | server.MapGet("/cookie", (HttpSession session) => ParseCookies(session)); |
10 | 28 | server.MapPost("/cookie", (HttpSession session) => ParseCookies(session)); |
11 | | -server.MapGet("/echo", (HttpSession session) => |
12 | | -{ |
13 | | - var sb = new System.Text.StringBuilder(); |
14 | | - foreach (var h in session.Request.Headers.EnumerateAll()) |
15 | | - sb.AppendLine($"{h.Key}: {h.Value}"); |
16 | | - return sb.ToString(); |
17 | | -}); |
18 | | -server.MapPost("/echo", (HttpSession session) => |
19 | | -{ |
| 29 | + |
| 30 | +static HttpResponse Echo(HttpSession session) { |
20 | 31 | var sb = new System.Text.StringBuilder(); |
21 | | - foreach (var h in session.Request.Headers.EnumerateAll()) |
| 32 | + foreach (var h in session.Request.Headers.EnumerateAll()) { |
22 | 33 | sb.AppendLine($"{h.Key}: {h.Value}"); |
23 | | - return sb.ToString(); |
24 | | -}); |
25 | | -server.MapGet("/", () => "OK"); |
26 | | -server.MapGet("/{path}", () => "OK"); |
27 | | -server.MapPost("/", (HttpSession session) => session.Request.BodyString); |
28 | | -server.MapPost("/{path}", (HttpSession session) => session.Request.BodyString); |
| 34 | + } |
| 35 | + return session.Response.Text(sb.ToString()); |
| 36 | +} |
29 | 37 |
|
30 | | -static string ParseCookies(HttpSession session) |
31 | | -{ |
| 38 | +static HttpResponse ParseCookies(HttpSession session) { |
32 | 39 | var sb = new System.Text.StringBuilder(); |
33 | | - foreach (var h in session.Request.Headers.EnumerateAll()) |
34 | | - { |
35 | | - if (string.Equals(h.Key, "Cookie", StringComparison.OrdinalIgnoreCase)) |
36 | | - { |
37 | | - foreach (var pair in h.Value.Split(';')) |
38 | | - { |
39 | | - var trimmed = pair.TrimStart(); |
40 | | - var eqIdx = trimmed.IndexOf('='); |
41 | | - if (eqIdx > 0) |
42 | | - sb.AppendLine($"{trimmed[..eqIdx]}={trimmed[(eqIdx + 1)..]}"); |
43 | | - } |
44 | | - } |
| 40 | + foreach (var pair in session.Request.Headers.EnumerateCookies()) { |
| 41 | + sb.AppendLine($"{pair.Key}={pair.Value}"); |
45 | 42 | } |
46 | | - return sb.ToString(); |
| 43 | + return session.Response.Text(sb.ToString()); |
47 | 44 | } |
48 | 45 |
|
49 | | -Console.WriteLine($"SimpleW listening on http://localhost:{port}"); |
50 | | - |
51 | 46 | await server.RunAsync(); |
0 commit comments