GenHTTP
Language: C# · View source on GitHub
Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY Directory.Build.props .
COPY src/Servers/GenHttpServer/ src/Servers/GenHttpServer/
RUN dotnet restore src/Servers/GenHttpServer/GenHttpServer.csproj
RUN dotnet publish src/Servers/GenHttpServer/GenHttpServer.csproj -c Release -o /app --no-restore
FROM mcr.microsoft.com/dotnet/runtime:10.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "GenHttpServer.dll", "8080"]Source
using GenHTTP.Api.Protocol;
using GenHTTP.Engine.Internal;
using GenHTTP.Modules.Functional;
using GenHTTP.Modules.Practices;
var port = (args.Length > 0 && ushort.TryParse(args[0], out var p)) ? p : (ushort)8080;
var app = Inline.Create()
.Get("/cookie", (IRequest request) => ParseCookies(request))
.Post("/cookie", (IRequest request) => ParseCookies(request))
.Get("/echo", (IRequest request) => Echo(request))
.Post("/echo", (IRequest request) => Echo(request))
.Post((Stream body) => RequestContent(body))
.Any(() => StringContent());
return await Host.Create()
.Handler(app)
.Defaults()
.Port(port)
.RunAsync();
static string Echo(IRequest request)
{
var headers = new System.Text.StringBuilder();
foreach (var h in request.Headers)
{
headers.AppendLine($"{h.Key}: {h.Value}");
}
return headers.ToString();
}
static string ParseCookies(IRequest request)
{
var sb = new System.Text.StringBuilder();
if (request.Headers.TryGetValue("Cookie", out var cookieHeader))
{
foreach (var pair in cookieHeader.Split(';'))
{
var trimmed = pair.TrimStart();
var eqIdx = trimmed.IndexOf('=');
if (eqIdx > 0)
sb.AppendLine($"{trimmed[..eqIdx]}={trimmed[(eqIdx + 1)..]}");
}
}
return sb.ToString();
}
static string StringContent() => "OK";
static Stream RequestContent(Stream body) => body;Test Results
Loading results...