Ce package naît de la nécessité de développer une API Web modulaire.
Asp.Net Core, grâce aux Application Parts, vous permet de modulariser le code et de les agréger facilement au sein d'une application d'hébergement.
La prise en charge du routage, en revanche, est un peu trop hostile.
Les Area offrent une sorte de support mais ne peuvent pas être mélangées avec le routage Annotated qui est la manière facultative de définir un routage WebApi.
Ce paquet vise à combler cette lacune.
Même s'il montre au mieux son utilité en conjonction avec le développement d'applications modularisées, vous pouvez également l'utiliser comme moyen alternatif de maintenir la configuration de routage dans un style de module.
Clonez, déposez ou nuget ce package dans votre solution.
ID des artefacts Nuget : MrBogomips.AspNetMvc.ModuleRouting
.
Ici, vous mappez les modules aux modèles de routage.
using MrBogomips.AspNetMvc.ModuleRouting;
...
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// ...
app.UseMvc(routes =>
{
routes.MapModuleRoute("Sample.MvcModuleA", "moduleA"); // Here's the fun!
routes.MapModuleRoute("Sample.MvcModuleB", "moduleB");
});
}
Au sein de votre contrôleur, vous le décorez simplement :
using MrBogomips.AspNetMvc.ModuleRouting;
namespace Sample.MvcModuleA
{
[RouteModule("Sample.MvcModuleA")]
public abstract class ModuleBaseController: ControllerBase {}
// BEST Practice: use a common module controller base class
// to achieve a better consistency and manteinability
public class ModuleController: ModuleBaseController
{
[HttpGet("hello")]
public string Hello() => "Hello from module A";
}
}
et voilà…
Rappelez-vous que vous utilisez simplement la syntaxe du modèle de routage MVC. Par conséquent, vous pouvez utiliser n'importe quel modèle de chaîne logique pour Asp.Net MVC. Par exemple:
[RouteModule("ModuleName")]
: définissez simplement la dépendance module-routage[RouteModule("ModuleName", "custom/segment")]
: le custom/segnment
sera ajouté au modèle de routage du module[RouteModule("ModuleName", "[controller]")]
: le nom du contrôleur sera ajouté au modèle de routage du module[RouteModule("ModuleName", "[action]")]
: le nom de l'action sera ajouté au modèle de routage du module ... pour une organisation Web Api complexe et étendue :
Controller
de base décorée avec l'un des attributs RoutModule
.AddApplicationPart(…)
MapModuleRoute(…)
namespace My.Module.Namespace {
[RouteModule(ModuleBaseController.ModuleName)]
public abstract class ModuleBaseController: BaseController
{
public const string ModuleName = "My.Module.Namespace";
}
}
Les contrôleurs dérivés peuvent également modifier leur routage de manière plus portable.
[RouteModule(ModuleBaseController.ModuleName, "some/different/admin/path")]
public class AdminController: ModuleBaseController
{
}
Par conséquent, le coinfig de routage peut être accompli plus fortement que
app.UseMvc(routes =>
{
//...
routes.MapModuleRoute(My.Module.Namespace.ModuleBaseController.ModuleName, "my/module/path");
//...
}
Pour une application de référence, consultez l'exemple d'application de ce projet.