Rework to use HttpRouter
parent
009fd85949
commit
dfab746fd2
|
@ -5,7 +5,7 @@ using System.Linq;
|
|||
|
||||
namespace ln.http.resources
|
||||
{
|
||||
public abstract class Resource
|
||||
public abstract class Resource : IHTTPResource
|
||||
{
|
||||
public Resource Container { get; protected set; }
|
||||
public Resource DefaultResource { get; set; }
|
||||
|
|
|
@ -3,32 +3,21 @@ using System.Collections.Generic;
|
|||
|
||||
namespace ln.http.resources
|
||||
{
|
||||
public class ResourceApplication : HttpApplication
|
||||
public class ResourceApplication
|
||||
{
|
||||
public Resource RootResource { get; set; }
|
||||
public HttpRouter HttpRouter { get; set; }
|
||||
|
||||
public ResourceApplication()
|
||||
public ResourceApplication(Resource rootResource,HttpRouter httpRouter)
|
||||
{
|
||||
RootResource = new BaseResource("");
|
||||
RootResource = rootResource;
|
||||
HttpRouter = httpRouter ?? new ResourceRouter(this);
|
||||
}
|
||||
|
||||
public override HttpResponse GetResponse(HttpRequest httpRequest)
|
||||
public ResourceApplication(Resource rootResource)
|
||||
:this(rootResource, null) { }
|
||||
public ResourceApplication()
|
||||
:this(new BaseResource(""))
|
||||
{
|
||||
Resource currentResource = RootResource;
|
||||
Queue<String> pathStack = new Queue<String>(httpRequest.URI.AbsolutePath.Split(new String[] { "/" }, StringSplitOptions.RemoveEmptyEntries));
|
||||
|
||||
while ((pathStack.Count > 0) && (!currentResource.HandlesDispatching))
|
||||
{
|
||||
String next = pathStack.Dequeue();
|
||||
if (!currentResource.Contains(next))
|
||||
{
|
||||
currentResource = currentResource.GetFallBackResource();
|
||||
break;
|
||||
}
|
||||
currentResource = currentResource.GetResource(next);
|
||||
}
|
||||
|
||||
return currentResource.GetResponse(httpRequest,pathStack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
namespace ln.http.resources
|
||||
{
|
||||
public class ResourceRouter : HttpRouter
|
||||
{
|
||||
Resource rootResource;
|
||||
ResourceApplication resourceApplication;
|
||||
|
||||
public Resource RootResource => rootResource ?? resourceApplication.RootResource;
|
||||
|
||||
public ResourceRouter(Resource rootResource)
|
||||
{
|
||||
this.rootResource = rootResource;
|
||||
}
|
||||
public ResourceRouter(ResourceApplication resourceApplication)
|
||||
{
|
||||
this.resourceApplication = resourceApplication;
|
||||
}
|
||||
|
||||
public override IHTTPResource FindResource(HttpRequest httpRequest)
|
||||
{
|
||||
Resource currentResource = RootResource;
|
||||
Queue<String> pathStack = new Queue<String>(httpRequest.URI.AbsolutePath.Split(new String[] { "/" }, StringSplitOptions.RemoveEmptyEntries));
|
||||
|
||||
while ((pathStack.Count > 0) && (!currentResource.HandlesDispatching))
|
||||
{
|
||||
String next = pathStack.Dequeue();
|
||||
if (!currentResource.Contains(next))
|
||||
{
|
||||
return currentResource.GetFallBackResource();
|
||||
}
|
||||
currentResource = currentResource.GetResource(next);
|
||||
}
|
||||
|
||||
return currentResource;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -48,6 +48,7 @@
|
|||
<Compile Include="collections\IEntityCollectionInterface.cs" />
|
||||
<Compile Include="collections\EntityMapper.cs" />
|
||||
<Compile Include="websocket\WebsocketResource.cs" />
|
||||
<Compile Include="ResourceRouter.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ln.http\ln.http.csproj">
|
||||
|
|
Loading…
Reference in New Issue