From 6424d44a97e1b9e6b4e03bb71dee03ab048f6d34 Mon Sep 17 00:00:00 2001 From: Tobias Klika Date: Thu, 19 Aug 2021 10:52:00 +0200 Subject: [PATCH] pass more data to route resolvers --- zero.Core/Routing/AbtractRouteProvider.cs | 4 +-- zero.Core/Routing/IRouteProvider.cs | 2 +- zero.Core/Routing/Page/PageRouteProvider.cs | 8 ++--- zero.Core/Routing/RouteResponse.cs | 16 ++++++++++ zero.Core/Routing/Routes.cs | 34 ++++++++++++--------- 5 files changed, 43 insertions(+), 21 deletions(-) create mode 100644 zero.Core/Routing/RouteResponse.cs diff --git a/zero.Core/Routing/AbtractRouteProvider.cs b/zero.Core/Routing/AbtractRouteProvider.cs index ffcdd038..28c9bd2f 100644 --- a/zero.Core/Routing/AbtractRouteProvider.cs +++ b/zero.Core/Routing/AbtractRouteProvider.cs @@ -111,9 +111,9 @@ namespace zero.Core.Routing /// - public virtual Task ResolveRoute(IAsyncDocumentSession session, Route route) + public virtual Task ResolveRoute(IAsyncDocumentSession session, RouteResponse response) { - DefaultResolvedRoute resolved = new DefaultResolvedRoute() { Route = route }; + DefaultResolvedRoute resolved = new DefaultResolvedRoute() { Route = response.Route }; return Task.FromResult((IResolvedRoute)resolved); } diff --git a/zero.Core/Routing/IRouteProvider.cs b/zero.Core/Routing/IRouteProvider.cs index bdf8cf4d..c87d84d5 100644 --- a/zero.Core/Routing/IRouteProvider.cs +++ b/zero.Core/Routing/IRouteProvider.cs @@ -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. /// - Task ResolveRoute(IAsyncDocumentSession session, Route route); + Task ResolveRoute(IAsyncDocumentSession session, RouteResponse response); /// /// Find URL for an entity diff --git a/zero.Core/Routing/Page/PageRouteProvider.cs b/zero.Core/Routing/Page/PageRouteProvider.cs index 93517dab..10aa2ead 100644 --- a/zero.Core/Routing/Page/PageRouteProvider.cs +++ b/zero.Core/Routing/Page/PageRouteProvider.cs @@ -33,12 +33,12 @@ namespace zero.Core.Routing /// - public override async Task ResolveRoute(IAsyncDocumentSession session, Route route) + public override async Task ResolveRoute(IAsyncDocumentSession session, RouteResponse response) { - PageRoute resolved = new PageRoute(route); + PageRoute resolved = new PageRoute(response.Route); List ids = new List(); - 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 pages = await session.LoadAsync(ids); diff --git a/zero.Core/Routing/RouteResponse.cs b/zero.Core/Routing/RouteResponse.cs new file mode 100644 index 00000000..9c2f2ad8 --- /dev/null +++ b/zero.Core/Routing/RouteResponse.cs @@ -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; } + } +} diff --git a/zero.Core/Routing/Routes.cs b/zero.Core/Routing/Routes.cs index 64025288..c00740d0 100644 --- a/zero.Core/Routing/Routes.cs +++ b/zero.Core/Routing/Routes.cs @@ -128,7 +128,7 @@ namespace zero.Core.Routing /// - public async Task ResolveUrl(Application application, string path) + public async Task 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); } - /// - public async Task ResolveRoute(Route route) - { - using IAsyncDocumentSession session = Store.OpenAsyncSession(); - return await ResolveRouteInternal(session, route); - } + ///// + //public async Task ResolveRoute(Route route) + //{ + // using IAsyncDocumentSession session = Store.OpenAsyncSession(); + // return await ResolveRouteInternal(session, null); // TODO + //} /// @@ -283,10 +289,10 @@ namespace zero.Core.Routing /// /// Call the provider which can resolve the route /// - async Task ResolveRouteInternal(IAsyncDocumentSession session, Route route) + async Task 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 /// /// Resolve an URL from the specified app and the path /// - Task ResolveUrl(Application application, string path); + Task ResolveUrl(HttpContext context, Application application, string path); /// /// Resolve an URL from an http context @@ -352,7 +358,7 @@ namespace zero.Core.Routing /// /// Resolve a route object by passing it to the specified provider /// - Task ResolveRoute(Route route); + //Task ResolveRoute(Route route); /// /// Returns the endpoint which maps 404 requests