pass more data to route resolvers
This commit is contained in:
@@ -111,9 +111,9 @@ namespace zero.Core.Routing
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
public virtual Task<IResolvedRoute> ResolveRoute(IAsyncDocumentSession session, Route route)
|
||||
public virtual Task<IResolvedRoute> ResolveRoute(IAsyncDocumentSession session, RouteResponse response)
|
||||
{
|
||||
DefaultResolvedRoute resolved = new DefaultResolvedRoute() { Route = route };
|
||||
DefaultResolvedRoute resolved = new DefaultResolvedRoute() { Route = response.Route };
|
||||
return Task.FromResult((IResolvedRoute)resolved);
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace zero.Core.Routing
|
||||
/// Resolve a route and load optional dependencies into it.
|
||||
/// This is the data which is passed to the specified controller action.
|
||||
/// </summary>
|
||||
Task<IResolvedRoute> ResolveRoute(IAsyncDocumentSession session, Route route);
|
||||
Task<IResolvedRoute> ResolveRoute(IAsyncDocumentSession session, RouteResponse response);
|
||||
|
||||
/// <summary>
|
||||
/// Find URL for an entity
|
||||
|
||||
@@ -33,12 +33,12 @@ namespace zero.Core.Routing
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
public override async Task<IResolvedRoute> ResolveRoute(IAsyncDocumentSession session, Route route)
|
||||
public override async Task<IResolvedRoute> ResolveRoute(IAsyncDocumentSession session, RouteResponse response)
|
||||
{
|
||||
PageRoute resolved = new PageRoute(route);
|
||||
PageRoute resolved = new PageRoute(response.Route);
|
||||
|
||||
List<string> ids = new List<string>();
|
||||
RouteReference reference = route.References.SingleOrDefault(x => x.Collection == REF_KEY);
|
||||
RouteReference reference = response.Route.References.SingleOrDefault(x => x.Collection == REF_KEY);
|
||||
|
||||
if (reference == null)
|
||||
{
|
||||
@@ -46,7 +46,7 @@ namespace zero.Core.Routing
|
||||
}
|
||||
|
||||
ids.Add(reference.Id);
|
||||
ids.AddRange(route.Dependencies);
|
||||
ids.AddRange(response.Route.Dependencies);
|
||||
|
||||
Dictionary<string, Page> pages = await session.LoadAsync<Page>(ids);
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using zero.Core.Entities;
|
||||
|
||||
namespace zero.Core.Routing
|
||||
{
|
||||
public class RouteResponse
|
||||
{
|
||||
public Route Route { get; set; }
|
||||
|
||||
public HttpContext HttpContext { get; set; }
|
||||
|
||||
public Application App { get; set; }
|
||||
|
||||
public string Path { get; set; }
|
||||
}
|
||||
}
|
||||
+20
-14
@@ -128,7 +128,7 @@ namespace zero.Core.Routing
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<IResolvedRoute> ResolveUrl(Application application, string path)
|
||||
public async Task<IResolvedRoute> ResolveUrl(HttpContext context, Application application, string path)
|
||||
{
|
||||
path = path.Length > 1 ? path.TrimEnd(PATH_SEPERATOR) : path;
|
||||
|
||||
@@ -186,7 +186,13 @@ namespace zero.Core.Routing
|
||||
return null;
|
||||
}
|
||||
|
||||
return await ResolveRouteInternal(session, route);
|
||||
return await ResolveRouteInternal(session, new RouteResponse()
|
||||
{
|
||||
Route = route,
|
||||
App = application,
|
||||
HttpContext = context,
|
||||
Path = path
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -206,16 +212,16 @@ namespace zero.Core.Routing
|
||||
return null;
|
||||
}
|
||||
|
||||
return await ResolveUrl(app, path);
|
||||
return await ResolveUrl(context, app, path);
|
||||
}
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<IResolvedRoute> ResolveRoute(Route route)
|
||||
{
|
||||
using IAsyncDocumentSession session = Store.OpenAsyncSession();
|
||||
return await ResolveRouteInternal(session, route);
|
||||
}
|
||||
///// <inheritdoc />
|
||||
//public async Task<IResolvedRoute> ResolveRoute(Route route)
|
||||
//{
|
||||
// using IAsyncDocumentSession session = Store.OpenAsyncSession();
|
||||
// return await ResolveRouteInternal(session, null); // TODO
|
||||
//}
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -283,10 +289,10 @@ namespace zero.Core.Routing
|
||||
/// <summary>
|
||||
/// Call the provider which can resolve the route
|
||||
/// </summary>
|
||||
async Task<IResolvedRoute> ResolveRouteInternal(IAsyncDocumentSession session, Route route)
|
||||
async Task<IResolvedRoute> ResolveRouteInternal(IAsyncDocumentSession session, RouteResponse response)
|
||||
{
|
||||
IRouteProvider routeProvider = FindProvider(route.ProviderAlias);
|
||||
return await routeProvider?.ResolveRoute(session, route);
|
||||
IRouteProvider routeProvider = FindProvider(response.Route.ProviderAlias);
|
||||
return await routeProvider?.ResolveRoute(session, response);
|
||||
}
|
||||
|
||||
|
||||
@@ -342,7 +348,7 @@ namespace zero.Core.Routing
|
||||
/// <summary>
|
||||
/// Resolve an URL from the specified app and the path
|
||||
/// </summary>
|
||||
Task<IResolvedRoute> ResolveUrl(Application application, string path);
|
||||
Task<IResolvedRoute> ResolveUrl(HttpContext context, Application application, string path);
|
||||
|
||||
/// <summary>
|
||||
/// Resolve an URL from an http context
|
||||
@@ -352,7 +358,7 @@ namespace zero.Core.Routing
|
||||
/// <summary>
|
||||
/// Resolve a route object by passing it to the specified provider
|
||||
/// </summary>
|
||||
Task<IResolvedRoute> ResolveRoute(Route route);
|
||||
//Task<IResolvedRoute> ResolveRoute(Route route);
|
||||
|
||||
/// <summary>
|
||||
/// Returns the endpoint which maps 404 requests
|
||||
|
||||
Reference in New Issue
Block a user