introduct IPageEndpointResolver which resolves a route to an MVC endpoint
This commit is contained in:
@@ -60,6 +60,11 @@ namespace zero.Core.Api
|
||||
app = await ResolveFromRequest(context);
|
||||
}
|
||||
|
||||
if (app == null)
|
||||
{
|
||||
throw new NullReferenceException($"Could not resolve application for host {context.Request.Host}");
|
||||
}
|
||||
|
||||
App = app;
|
||||
AppId = app?.Id;
|
||||
|
||||
|
||||
@@ -11,21 +11,32 @@ namespace zero.Core.Routing
|
||||
|
||||
public virtual Type[] AffectedTypes { get; protected set; }
|
||||
|
||||
public virtual string Controller { get; protected set; }
|
||||
|
||||
public virtual string Action { get; protected set; }
|
||||
|
||||
public const string ID_PREFIX = "routes.";
|
||||
|
||||
public const char SLASH = '/';
|
||||
|
||||
protected RouteProviderEndpoint DefaultEndpoint { get; set; }
|
||||
|
||||
|
||||
|
||||
public AbtractRouteProvider(string alias)
|
||||
{
|
||||
Alias = alias;
|
||||
AffectedTypes = new Type[1] { typeof(T) };
|
||||
Controller = "DefaultRoute";
|
||||
Action = "Index";
|
||||
AffectedTypes = new Type[1] { typeof(T) };
|
||||
DefaultEndpoint = new RouteProviderEndpoint()
|
||||
{
|
||||
Controller = "DefaultRoute",
|
||||
Action = "Index"
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Map a route to an MVC endpoint
|
||||
/// </summary>
|
||||
public virtual RouteProviderEndpoint MapEndpoint(IResolvedRoute route)
|
||||
{
|
||||
return DefaultEndpoint;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -26,9 +26,10 @@ namespace zero.Core.Routing
|
||||
|
||||
Type[] AffectedTypes { get; }
|
||||
|
||||
string Controller { get; }
|
||||
|
||||
string Action { get; }
|
||||
/// <summary>
|
||||
/// Map a route to an MVC endpoint
|
||||
/// </summary>
|
||||
RouteProviderEndpoint MapEndpoint(IResolvedRoute route);
|
||||
|
||||
/// <summary>
|
||||
/// Resolve a route and load optional dependencies into it.
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using zero.Core.Api;
|
||||
using zero.Core.Entities;
|
||||
|
||||
namespace zero.Core.Routing
|
||||
{
|
||||
public interface IPageEndpointResolver
|
||||
{
|
||||
/// <summary>
|
||||
/// Get MVC endpoint for the page route
|
||||
/// </summary>
|
||||
RouteProviderEndpoint GetEndpoint(PageRoute route);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
namespace zero.Core.Routing
|
||||
{
|
||||
public class PageEndpointResolver : IPageEndpointResolver
|
||||
{
|
||||
protected RouteProviderEndpoint DefaultEndpoint { get; set; }
|
||||
|
||||
|
||||
public PageEndpointResolver()
|
||||
{
|
||||
DefaultEndpoint = new RouteProviderEndpoint()
|
||||
{
|
||||
Controller = "DefaultRoute",
|
||||
Action = "Index"
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public virtual RouteProviderEndpoint GetEndpoint(PageRoute route)
|
||||
{
|
||||
return DefaultEndpoint;
|
||||
}
|
||||
}
|
||||
}
|
||||
+15
-1
@@ -19,11 +19,25 @@ namespace zero.Core.Routing
|
||||
|
||||
protected IPageUrlBuilder UrlBuilder { get; set; }
|
||||
|
||||
protected IPageEndpointResolver EndpointResolver { get; set; }
|
||||
|
||||
public PageRouteProvider(ILogger<PageRouteProvider> logger, IPageUrlBuilder urlBuilder) : base("zero.pages")
|
||||
|
||||
public PageRouteProvider(ILogger<PageRouteProvider> logger, IPageUrlBuilder urlBuilder, IPageEndpointResolver endpointResolver) : base("zero.pages")
|
||||
{
|
||||
Logger = logger;
|
||||
UrlBuilder = urlBuilder;
|
||||
EndpointResolver = endpointResolver;
|
||||
}
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
public override RouteProviderEndpoint MapEndpoint(IResolvedRoute route)
|
||||
{
|
||||
if (!(route is PageRoute))
|
||||
{
|
||||
return base.MapEndpoint(route);
|
||||
}
|
||||
return EndpointResolver.GetEndpoint(route as PageRoute);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,14 @@
|
||||
{
|
||||
public class RouteProviderEndpoint
|
||||
{
|
||||
public RouteProviderEndpoint() { }
|
||||
|
||||
public RouteProviderEndpoint(string controller, string action = "Index")
|
||||
{
|
||||
Controller = controller;
|
||||
Action = action;
|
||||
}
|
||||
|
||||
public string Controller { get; set; }
|
||||
|
||||
public string Action { get; set; }
|
||||
|
||||
@@ -102,7 +102,7 @@ namespace zero.Core.Routing
|
||||
/// <inheritdoc />
|
||||
public async Task<IResolvedRoute> ResolveUrl(HttpContext context)
|
||||
{
|
||||
IApplication app = await Context.ResolveFromRequest(context);
|
||||
IApplication app = await Context.Resolve(context);
|
||||
string path = context.Request.Path;
|
||||
|
||||
return await ResolveUrl(app.Id, path);
|
||||
@@ -154,14 +154,10 @@ namespace zero.Core.Routing
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
public RouteProviderEndpoint GetEndpoint(IRoute route)
|
||||
public RouteProviderEndpoint MapEndpoint(IResolvedRoute route)
|
||||
{
|
||||
IRouteProvider routeProvider = FindProvider(route.ProviderAlias);
|
||||
return routeProvider != null ? new RouteProviderEndpoint()
|
||||
{
|
||||
Controller = routeProvider.Controller,
|
||||
Action = routeProvider.Action
|
||||
} : null;
|
||||
IRouteProvider routeProvider = FindProvider(route.Route.ProviderAlias);
|
||||
return routeProvider?.MapEndpoint(route);
|
||||
}
|
||||
|
||||
|
||||
@@ -237,6 +233,6 @@ namespace zero.Core.Routing
|
||||
/// <summary>
|
||||
/// Get endpoint the route maps to
|
||||
/// </summary>
|
||||
RouteProviderEndpoint GetEndpoint(IRoute route);
|
||||
RouteProviderEndpoint MapEndpoint(IResolvedRoute route);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,6 +92,7 @@ namespace zero.Web.Defaults
|
||||
|
||||
services.AddScoped<IRoutes, Routes>();
|
||||
services.AddScoped<IPageUrlBuilder, PageUrlBuilder>();
|
||||
services.AddScoped<IPageEndpointResolver, PageEndpointResolver>();
|
||||
//services.AddTransient<IUrlProvider, PageUrlProvider>();
|
||||
services.AddScoped<IRouteProvider, PageRouteProvider>();
|
||||
services.AddScoped<PageRouteProvider>();
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace zero.Web.Routing
|
||||
return null;
|
||||
}
|
||||
|
||||
RouteProviderEndpoint endpoint = Routes.GetEndpoint(route.Route);
|
||||
RouteProviderEndpoint endpoint = Routes.MapEndpoint(route);
|
||||
|
||||
values["zero.app"] = await Context.Resolve(httpContext);
|
||||
values["zero.route"] = route;
|
||||
|
||||
Reference in New Issue
Block a user