Skip to content

Commit 24da1eb

Browse files
committed
MVP working with .Net 8
1 parent 18a1fb7 commit 24da1eb

File tree

4 files changed

+363
-38
lines changed

4 files changed

+363
-38
lines changed

JsonpHandler.cs

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using Microsoft.AspNetCore.Http;
2+
using System.Text.Json;
3+
4+
public static class JsonpHandler
5+
{
6+
public static async Task<bool> handleJsonp(HttpContext theContext, object data)
7+
{
8+
string jsonStr = JsonSerializer.Serialize(data);
9+
10+
var response = theContext.Response;
11+
var callback = theContext.Request.Query["callback"];
12+
theContext.Response.Clear();
13+
if (string.IsNullOrEmpty(callback))
14+
{
15+
response.ContentType = "application/json";
16+
response.Headers.Append("Access-Control-Allow-Origin", "*");
17+
response.Headers.Append("Access-Control-Allow-Methods", "GET");
18+
response.Headers.Append("Access-Control-Max-Age", "604800");
19+
await response.WriteAsync(jsonStr);
20+
}
21+
else
22+
{
23+
response.ContentType = "text/javascript; charset=utf-8";
24+
await response.WriteAsync($"{callback}({jsonStr});");
25+
}
26+
return true;
27+
}
28+
}

Program.cs

+34-37
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,6 @@
11
using System.Text.Json;
22
using Microsoft.AspNetCore.HttpLogging;
3-
4-
static async Task<bool> handleJsonp(HttpContext theContext, object data)
5-
{
6-
string jsonStr = JsonSerializer.Serialize(data);
7-
8-
var response = theContext.Response;
9-
var callback = theContext.Request.Query["callback"];
10-
theContext.Response.Clear();
11-
if (string.IsNullOrEmpty(callback))
12-
{
13-
response.ContentType = "application/json";
14-
response.Headers.Append("Access-Control-Allow-Origin", "*");
15-
response.Headers.Append("Access-Control-Allow-Methods", "GET");
16-
response.Headers.Append("Access-Control-Max-Age", "604800");
17-
await response.WriteAsync(jsonStr);
18-
} else {
19-
response.ContentType = "text/javascript; charset=utf-8";
20-
await response.WriteAsync($"{callback}({jsonStr});");
21-
}
22-
return true;
23-
}
3+
using Microsoft.Extensions.Primitives;
244

255
var builder = WebApplication.CreateBuilder(args);
266
builder.Services.AddHttpLogging(logging =>
@@ -37,14 +17,14 @@ static async Task<bool> handleJsonp(HttpContext theContext, object data)
3717

3818
var result = new TestOutput(false, "404 Not Found", "");
3919

40-
await handleJsonp(theContext, result);
20+
await JsonpHandler.handleJsonp(theContext, result);
4121
});
4222

4323
app.UseHttpLogging();
4424

4525
app.UseStaticFiles();
4626

47-
app.MapGet("/", () => "Running!");
27+
app.MapGet("/", () => $".NET {Environment.Version}");
4828
app.MapGet("/status.json", static async (HttpContext theContext) =>
4929
{
5030
var statusResult = new StatusResult(true,
@@ -55,25 +35,43 @@ static async Task<bool> handleJsonp(HttpContext theContext, object data)
5535
Environment.GetEnvironmentVariable("COMMIT") ?? "(local)"
5636
);
5737

58-
await handleJsonp(theContext, statusResult);
38+
await JsonpHandler.handleJsonp(theContext, statusResult);
5939
});
6040

61-
app.MapPost("/test.json", RunTest);
62-
app.MapGet("/test.json", RunTest);
41+
app.MapPost("/test.json", PostRunTest);
42+
app.MapGet("/test.json", GetRunTest);
6343

64-
static async Task RunTest(HttpContext theContext)
65-
{
66-
// read form variables
67-
var form = await theContext.Request.ReadFormAsync();
68-
var regex = form["regex"].FirstOrDefault();
69-
var replacement = form["replacement"].FirstOrDefault();
70-
var input = form["input"].ToArray() ?? new string[] { };
44+
static string[] getStrings(StringValues rawValues) {
45+
46+
return rawValues.Where(i => i != null).Select(i => i!).ToArray() ?? new string[] { };
47+
}
48+
49+
static async Task GetRunTest(HttpContext theContext)
50+
{
51+
var regex = theContext.Request.Query["regex"].FirstOrDefault() ?? "";
52+
var replacement = theContext.Request.Query["replacement"].FirstOrDefault() ?? "";
53+
var options = getStrings(theContext.Request.Query["option"]);
54+
var inputs = getStrings(theContext.Request.Query["input"]);
55+
56+
var testInput = new TestInput(regex, replacement, options, inputs);
57+
var testOutput = TestRunner.RunTest(testInput);
58+
59+
await JsonpHandler.handleJsonp(theContext, testOutput);
60+
}
7161

72-
var html = $"{regex} {replacement} {input.Length} {input.FirstOrDefault()}";
7362

74-
var testOutput = new TestOutput(true, "", html);
63+
static async Task PostRunTest(HttpContext theContext)
64+
{
65+
var form = await theContext.Request.ReadFormAsync();
66+
var regex = form["regex"].FirstOrDefault() ?? "";
67+
var replacement = form["replacement"].FirstOrDefault() ?? "";
68+
var options = getStrings(form["option"]);
69+
var inputs = getStrings(form["input"]);
70+
71+
var testInput = new TestInput(regex, replacement, options, inputs);
72+
var testOutput = TestRunner.RunTest(testInput);
7573

76-
await handleJsonp(theContext, testOutput);
74+
await JsonpHandler.handleJsonp(theContext, testOutput);
7775
}
7876

7977
var hostname = Environment.GetEnvironmentVariable("HOSTNAME") ?? "0.0.0.0";
@@ -85,5 +83,4 @@ static async Task RunTest(HttpContext theContext)
8583
app.Run(url);
8684

8785
record StatusResult(Boolean success, string tech, string version, string timestamp, string lastmod, string commit);
88-
record TestOutput(Boolean success, string message, string html);
8986

0 commit comments

Comments
 (0)