From 1daf73df090136d03d4035beab616f5e2c3cd260 Mon Sep 17 00:00:00 2001 From: Tobias Klika Date: Tue, 17 Nov 2020 11:27:05 +0100 Subject: [PATCH] host shit --- zero.Core/ZeroContext.cs | 17 ++++-- zero.Web/Middlewares/ZeroMiddleware.cs | 28 +++++++-- zero.Web/Routing/ZeroRoutesTransformer.cs | 64 ++++++++++---------- zero.Web/ZeroApplicationBuilderExtensions.cs | 49 ++++++++------- 4 files changed, 96 insertions(+), 62 deletions(-) diff --git a/zero.Core/ZeroContext.cs b/zero.Core/ZeroContext.cs index def6327d..5b1c54e8 100644 --- a/zero.Core/ZeroContext.cs +++ b/zero.Core/ZeroContext.cs @@ -89,12 +89,14 @@ namespace zero.Core // set default database for document store Store.ResolvedDatabase = Application.Database; + } - if (IsBackofficeRequest is false && context.Request.RouteValues.TryGetValue("zero.route", out object route)) - { - ResolvedRoute = (IResolvedRoute)route; - Route = ResolvedRoute.Route; - } + + /// + public virtual void SetRoute(IResolvedRoute route) + { + ResolvedRoute = route; + Route = ResolvedRoute.Route; } } @@ -141,5 +143,10 @@ namespace zero.Core /// the currently active backoffice user, as users are not signed in with the default scheme and do therefore not populate HttpContext.User /// Task Resolve(HttpContext context, IEnumerable applications); + + /// + /// Set resolved route for frontend requests + /// + void SetRoute(IResolvedRoute route); } } diff --git a/zero.Web/Middlewares/ZeroMiddleware.cs b/zero.Web/Middlewares/ZeroMiddleware.cs index d24ca7c8..6fd44256 100644 --- a/zero.Web/Middlewares/ZeroMiddleware.cs +++ b/zero.Web/Middlewares/ZeroMiddleware.cs @@ -3,30 +3,50 @@ using System; using System.Threading.Tasks; using zero.Core; using zero.Core.Host; +using zero.Core.Routing; namespace zero.Web.Middlewares { public class ZeroMiddleware { readonly RequestDelegate Next; + readonly IZeroHost Host; + readonly IRoutes Routes; - public ZeroMiddleware(RequestDelegate next) + public ZeroMiddleware(RequestDelegate next, IZeroHost zeroHost, IRoutes routes) { Next = next; + Host = zeroHost; + Routes = routes; } - public async Task Invoke(HttpContext httpContext, IZeroHost zeroHost) + public async Task Invoke(HttpContext httpContext) { - await zeroHost.Initialize(); + await Host.Initialize(); if (httpContext == null) { throw new ArgumentNullException(nameof(httpContext)); } - IZeroContext context = await zeroHost.GetContext(httpContext); + IZeroContext context = await Host.GetContext(httpContext); + + if (!context.IsBackofficeRequest) + { + IResolvedRoute route = await Routes.ResolveUrl(httpContext); + + if (route != null) + { + context.SetRoute(route); + + RouteProviderEndpoint endpoint = Routes.MapEndpoint(route); + + httpContext.Request.RouteValues["controller"] = endpoint.Controller; + httpContext.Request.RouteValues["action"] = endpoint.Action; + } + } await Next(httpContext); } diff --git a/zero.Web/Routing/ZeroRoutesTransformer.cs b/zero.Web/Routing/ZeroRoutesTransformer.cs index 41feb51b..6859e99b 100644 --- a/zero.Web/Routing/ZeroRoutesTransformer.cs +++ b/zero.Web/Routing/ZeroRoutesTransformer.cs @@ -1,40 +1,40 @@ -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc.Routing; -using Microsoft.AspNetCore.Routing; -using System; -using System.Threading.Tasks; -using zero.Core.Routing; +//using Microsoft.AspNetCore.Http; +//using Microsoft.AspNetCore.Mvc.Routing; +//using Microsoft.AspNetCore.Routing; +//using System; +//using System.Threading.Tasks; +//using zero.Core.Routing; -namespace zero.Web.Routing -{ - public class ZeroRoutesTransformer : DynamicRouteValueTransformer - { - IRoutes Routes; +//namespace zero.Web.Routing +//{ +// public class ZeroRoutesTransformer : DynamicRouteValueTransformer +// { +// IRoutes Routes; - public ZeroRoutesTransformer(IRoutes routes) - { - Routes = routes; - } +// public ZeroRoutesTransformer(IRoutes routes) +// { +// Routes = routes; +// } - public override async ValueTask TransformAsync(HttpContext httpContext, RouteValueDictionary values) - { - Console.WriteLine("resolve route"); - IResolvedRoute route = await Routes.ResolveUrl(httpContext); +// public override async ValueTask TransformAsync(HttpContext httpContext, RouteValueDictionary values) +// { +// Console.WriteLine("resolve route"); +// IResolvedRoute route = await Routes.ResolveUrl(httpContext); - Console.WriteLine("route: " + route?.Route.Url); - if (route == null) - { - return null; - } +// Console.WriteLine("route: " + route?.Route.Url); +// if (route == null) +// { +// return null; +// } - RouteProviderEndpoint endpoint = Routes.MapEndpoint(route); +// RouteProviderEndpoint endpoint = Routes.MapEndpoint(route); - values["zero.route"] = route; - values["controller"] = endpoint.Controller; - values["action"] = endpoint.Action; +// values["zero.route"] = route; +// values["controller"] = endpoint.Controller; +// values["action"] = endpoint.Action; - return values; - } - } -} +// return values; +// } +// } +//} diff --git a/zero.Web/ZeroApplicationBuilderExtensions.cs b/zero.Web/ZeroApplicationBuilderExtensions.cs index 61daa0ee..91630b9b 100644 --- a/zero.Web/ZeroApplicationBuilderExtensions.cs +++ b/zero.Web/ZeroApplicationBuilderExtensions.cs @@ -8,7 +8,6 @@ using zero.Core; using zero.Core.Extensions; using zero.Core.Options; using zero.Web.Middlewares; -using zero.Web.Routing; namespace zero.Web { @@ -20,29 +19,33 @@ namespace zero.Web string path = options.BackofficePath.EnsureStartsWith('/').TrimEnd('/'); + app.UseStatusCodePages(); + app.UseRouting(); + app.UseRequestLocalization(); + app.UseMiddleware(); app.UseMiddleware(); // map backoffice - app.UseWhen(ctx => ctx.Request.Path.ToString().StartsWith(path), builder => - { - builder.UseRouting(); + //app.UseWhen(ctx => ctx.Request.Path.ToString().StartsWith(path), builder => + //{ + // builder.UseRouting(); - builder.UseAuthentication(); - builder.UseAuthorization(); + // builder.UseAuthentication(); + // builder.UseAuthorization(); - builder.UseEndpoints(endpoints => - { - //// routes for API - //endpoints.MapControllerRoute( - // name: "api", - // pattern: path + "/api/{controller}/{action}/{id?}" - //); + // builder.UseEndpoints(endpoints => + // { + // //// routes for API + // //endpoints.MapControllerRoute( + // // name: "api", + // // pattern: path + "/api/{controller}/{action}/{id?}" + // //); - // fallbacks for SPA - endpoints.MapFallbackToController(path + "/{**path}", "Index", "ZeroBackoffice"); - }); - }); + // // fallbacks for SPA + // endpoints.MapFallbackToController(path + "/{**path}", "Index", "ZeroBackoffice"); + // }); + //}); return app; } @@ -84,13 +87,17 @@ namespace zero.Web RequestDelegate backofficePipeline = endpoints.CreateApplicationBuilder() .UseMiddleware(args) + .UseStaticFiles() + .UseRouting() + .UseAuthentication() + .UseAuthorization() .Build(); - RequestDelegate frontendPipeline = endpoints.CreateApplicationBuilder() - .UseMiddleware(args) - .Build(); + //RequestDelegate frontendPipeline = endpoints.CreateApplicationBuilder() + // .UseMiddleware(args) + // .Build(); - endpoints.map(frontendPipeline); + //endpoints.map(frontendPipeline); return endpoints.Map(pattern, backofficePipeline).WithDisplayName("Zero"); }