ASP.NET Core routing is responsible for mapping incoming browser requests to particular MVC controller actions. NopCommerce has an IRouteProvider interface which is used for route registration during application startup. All core routes are registered in the RouteProvider class located in the Nop.Web project.
Step 1:Create Custom RouteProvider class
public partial class RouteProvider : IRouteProvider
{
public void RegisterRoutes(IRouteBuilder routeBuilder)
{
//home page
routeBuilder.MapLocalizedRoute("HomePage", "", new { controller = "Home", action = "Index" });
}
}
You can create as many RouteProvider classes as you need. For example, if your plugin has some custom routes which you want to register, then create a new class implementing the IRouteProvider interface and register the routes specific to your new plugin.
Step 2:Register the routes
Nop.Web.Framework/Mvc/Routing/RoutePublisher.cs
using Grand.Core.Extensions;
using Grand.Core.Infrastructure;
using Grand.Core.Plugins;
using Microsoft.AspNetCore.Routing;
using System;
using System.Linq;
namespace Grand.Framework.Mvc.Routing
{
/// <summary>
/// Represents implementation of route publisher
/// </summary>
public class RoutePublisher : IRoutePublisher
{
#region Fields
protected readonly ITypeFinder typeFinder;
#endregion
#region Ctor
public RoutePublisher(ITypeFinder typeFinder)
{
this.typeFinder = typeFinder;
}
#endregion
#region Methods
/// <summary>
/// Register routes
/// </summary>
/// <param name="routeBuilder">Route builder</param>
public virtual void RegisterRoutes(IRouteBuilder routeBuilder)
{
//find route providers provided by other assemblies
var routeProviders = typeFinder.FindClassesOfType<IRouteProvider>();
//create and sort instances of route providers
var instances = routeProviders
.Where(routeProvider => PluginManager.FindPlugin(routeProvider).Return(plugin => plugin.Installed, true)) //ignore not installed plugins
.Select(routeProvider => (IRouteProvider)Activator.CreateInstance(routeProvider))
.OrderByDescending(routeProvider => routeProvider.Priority);
//register all provided routes
foreach (var routeProvider in instances)
routeProvider.RegisterRoutes(routeBuilder);
}
#endregion
}
}