40 lines
1.3 KiB
C#
40 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|