private async Task <RouterResult> CompileRoutes(RouteTree routeTree, RouteContext context, HtmlNode node = null, Component parent = null) { var component = _provider.CreateComponent(routeTree.Route.Component, context: context.HttpContext); var _authorizationService = context.HttpContext.RequestServices.GetRequiredService <IAuthorizationService>(); if (routeTree.Route.Handler != null) { _currentRoute.Route = routeTree.Route; var authResult = await _authorizationService.AuthorizeAsync(context.HttpContext.User, new object { }, "BibaScheme"); if (!authResult.Succeeded) { throw new UnauthorizedAccessException(); } } if (!routeTree.Skip) { if (node == null) { node = new HtmlNode(HtmlNodeType.Document, new HtmlDocument(), 0); node.InnerHtml = _compiler.PassValues(component); } else { var container = node.Descendants().FirstOrDefault(x => x.Attributes.Any(a => a.Name.Equals("router-container"))); if (container != null) { container.InnerHtml = _compiler.PassValues(component); } else { throw new RouterChildContainerNotExistsException(); } } } if (routeTree.NestedRoute != null) { return(await CompileRoutes(routeTree.NestedRoute, context, node, parent)); } return(new RouterResult { Html = node.OuterHtml, Scope = component.Scope }); }
private string StartCompile(Component component) { var doc = new HtmlDocument(); doc.LoadHtml(component.Template); component.HtmlElement = doc.DocumentNode; return(_compiler.PassValues(component)); }