ln.http/router/RouterTarget.cs

62 lines
2.3 KiB
C#
Raw Normal View History

2020-01-13 08:43:24 +01:00
using System;
using ln.http.exceptions;
namespace ln.http.router
{
public class RouterTarget :IHttpRouter
{
2020-03-03 17:13:31 +01:00
public Func<HttpRoutingContext,HttpRequest, HttpResponse> Target { get; }
2020-01-13 08:43:24 +01:00
public RouterTarget(Func<string, HttpRequest, HttpResponse> target)
2020-03-03 17:13:31 +01:00
{
Target = (HttpRoutingContext routingContext, HttpRequest httpRequest) => target(routingContext.Path, httpRequest);
}
public RouterTarget(Func<HttpRoutingContext, HttpRequest, HttpResponse> target)
2020-01-13 08:43:24 +01:00
{
Target = target;
}
public RouterTarget(Func<HttpRequest, HttpResponse> target)
{
2020-03-03 17:13:31 +01:00
Target = (context,request) => target(request);
}
2020-01-13 08:43:24 +01:00
protected RouterTarget()
{
Target = (path,request) => Dispatch(request);
2020-01-13 08:43:24 +01:00
}
public virtual HttpResponse Dispatch(HttpRequest request)
{
switch (request.Method.ToUpper())
{
case "HEAD":
return HEAD(request);
case "GET":
return GET(request);
case "PROPFIND":
return PROPFIND(request);
case "POST":
return POST(request);
case "PUT":
return PUT(request);
case "DELETE":
return DELETE(request);
default:
throw new MethodNotAllowedException();
}
}
2020-03-03 17:13:31 +01:00
public HttpResponse Route(HttpRoutingContext routingContext, HttpRequest httpRequest)
2020-01-13 08:43:24 +01:00
{
2020-03-03 17:13:31 +01:00
return Target(routingContext, httpRequest);
2020-01-13 08:43:24 +01:00
}
public virtual HttpResponse HEAD(HttpRequest request) => throw new MethodNotAllowedException();
public virtual HttpResponse GET(HttpRequest request) => throw new MethodNotAllowedException();
public virtual HttpResponse PROPFIND(HttpRequest request) => throw new MethodNotAllowedException();
public virtual HttpResponse POST(HttpRequest request) => throw new MethodNotAllowedException();
public virtual HttpResponse PUT(HttpRequest request) => throw new MethodNotAllowedException();
public virtual HttpResponse DELETE(HttpRequest request) => throw new MethodNotAllowedException();
}
}