HttpMethod

This commit is contained in:
Timerix 2025-03-23 02:36:47 +05:00
parent 2b5d6b6a54
commit 1eb208cba3
3 changed files with 23 additions and 10 deletions

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<!--package info--> <!--package info-->
<PackageId>DTLib.Web</PackageId> <PackageId>DTLib.Web</PackageId>
<Version>1.1.2</Version> <Version>1.2.0</Version>
<Authors>Timerix</Authors> <Authors>Timerix</Authors>
<Description>HTTP Server with simple routing</Description> <Description>HTTP Server with simple routing</Description>
<RepositoryType>GIT</RepositoryType> <RepositoryType>GIT</RepositoryType>

15
DTLib.Web/HttpMethod.cs Normal file
View File

@ -0,0 +1,15 @@
namespace DTLib.Web;
/// <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods"/>
public enum HttpMethod
{
GET,
POST,
PUT,
DELETE,
PATCH,
HEAD,
OPTIONS,
TRACE,
CONNECT
}

View File

@ -3,9 +3,9 @@ namespace DTLib.Web.Routes;
public class SimpleRouter : IRouter public class SimpleRouter : IRouter
{ {
/// route for base url /// route for base url
public RouteHandler? HomePageRoute = null; public RouteHandler? HomePageRoute { get; set; }
/// route for any url that doesn't have its own handler /// route for any url that doesn't have its own handler
public RouteHandler? DefaultRoute = null; public RouteHandler? DefaultRoute { get; set; }
private readonly Dictionary<string, RouteHandler> _routes = new(); private readonly Dictionary<string, RouteHandler> _routes = new();
@ -16,11 +16,10 @@ public class SimpleRouter : IRouter
_logger = logger; _logger = logger;
} }
public void MapRoute(string url, HttpMethod method, RouteHandler route) => _routes.Add($"{url}:{method}", route);
public void MapRoute(string url, Func<HttpListenerContext, Task<HttpStatusCode>> route) public void MapRoute(string url, HttpMethod method, Func<HttpListenerContext, Task<HttpStatusCode>> route)
=> MapRoute(url, new DelegateRouteHandler(route)); => MapRoute(url, method, new DelegateRouteHandler(route));
public void MapRoute(string url, RouteHandler route) => _routes.Add(url, route);
public async Task<HttpStatusCode> Resolve(HttpListenerContext ctx) public async Task<HttpStatusCode> Resolve(HttpListenerContext ctx)
{ {
@ -28,9 +27,8 @@ public class SimpleRouter : IRouter
RouteHandler? route; RouteHandler? route;
if(HomePageRoute != null && requestPath == "/") if(HomePageRoute != null && requestPath == "/")
route = HomePageRoute; route = HomePageRoute;
else if (_routes.TryGetValue(requestPath, out var routeDelegate)) else if (!_routes.TryGetValue($"{requestPath}:{ctx.Request.HttpMethod}", out route))
route = routeDelegate; route = DefaultRoute;
else route = DefaultRoute;
HttpStatusCode status; HttpStatusCode status;
if (route == null) if (route == null)