tesses.webserver/Tesses.WebServer.Console/Server.cs

102 lines
3.0 KiB
C#

using System;
using System.Text;
using System.Threading.Tasks;
namespace Tesses.WebServer.ConsoleApp
{
public class DynamicServer : Server
{
public DynamicServer()
{
}
Random rand = new Random();
int count = 0;
public override async Task PostAsync(ServerContext ctx)
{
ctx.ParseBody();
foreach(var item in ctx.QueryParams)
{
Console.WriteLine($"{item.Key}:");
foreach(var p in item.Value)
{
Console.WriteLine($"\t{p}");
}
Console.WriteLine();
}
await ctx.SendTextAsync("HELLO");
}
public override async Task GetAsync(ServerContext ctx)
{
//Console.WriteLine("HANDLE");
if(ctx.UrlPath=="/count")
{
count++;
await ctx.SendTextAsync($"This page has been viewed {count} times");
}
if(ctx.UrlPath=="/rand")
{
int min = 0;
int max = 65536;
int times = 5;
bool dont_show_hint = false;
if(ctx.QueryParams.ContainsKey("min"))
{
if(!int.TryParse(ctx.QueryParams.GetFirst("min"),out min))
{
min = 0;
}
else
{
dont_show_hint = true;
}
}
if (ctx.QueryParams.ContainsKey("max"))
{
if (!int.TryParse(ctx.QueryParams.GetFirst("max"), out max))
{
max = 65536;
}
else
{
dont_show_hint = true;
}
}
if (ctx.QueryParams.ContainsKey("times"))
{
if (!int.TryParse(ctx.QueryParams.GetFirst("times"), out times))
{
times = 5;
}
else
{
dont_show_hint = true;
}
}
max++;
StringBuilder html = new StringBuilder();
html.Append("<html><head><title>Random Numbers</title></head><body><h1>Random Numbers</h1>");
if(!dont_show_hint)
{
string hint = "Hint: <a href=\"./rand?min=41&max=1992&times=42\">./rand?min=41&max=1992&times=42</a><br>";
html.Append(hint);
}
html.Append(rand.Next(min, max));
for(int i = 1;i<times;i++)
{
html.Append($", {rand.Next(min, max)}");
}
html.Append("</body></html>");
await ctx.SendTextAsync(html.ToString());
}
}
}
}