Dieses Paket entsteht aus der Notwendigkeit, eine modulare Web-API zu entwickeln.
Mit Asp.Net Core können Sie mithilfe von Anwendungsteilen den Code modularisieren und ihn einfach in einer Hosting-App zusammenfassen.
Die Unterstützung für Routing ist dagegen etwas zu gastfreundlich.
Area s bieten eine gewisse Unterstützung, sind jedoch nicht mit Annotated Routing mischbar, das die optionale Methode zum Definieren eines WebApi-Routings darstellt.
Dieses Paket soll diese Lücke schließen.
Auch wenn es seine Nützlichkeit am besten in Verbindung mit der modularisierten App-Entwicklung zeigt, können Sie es auch als alternative Möglichkeit verwenden, die Routing-Konfiguration im Modulstil beizubehalten.
Klonen, Drop oder Nuget dieses Pakets in Ihrer Lösung.
Nuget-Artefakt-ID: MrBogomips.AspNetMvc.ModuleRouting
.
Hier ordnen Sie Module Routenvorlagen zu.
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");
});
}
Innerhalb Ihres Controllers dekorieren Sie ihn einfach:
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à…
Denken Sie daran, dass Sie lediglich die MVC-Routing-Vorlagensyntax verwenden. Sie können daher jede beliebige Zeichenfolgenvorlage verwenden, die für Asp.Net MVC sinnvoll ist. Zum Beispiel:
[RouteModule("ModuleName")]
: Definieren Sie einfach die Modul-Routing-Abhängigkeit[RouteModule("ModuleName", "custom/segment")]
: Das custom/segnment
wird an die Modul-Routing-Vorlage angehängt[RouteModule("ModuleName", "[controller]")]
: Der Name des Controllers wird an die Modul-Routing-Vorlage angehängt[RouteModule("ModuleName", "[action]")]
: Der Name der Aktion wird an die Modul-Routing-Vorlage angehängt ... für eine komplexe, umfangreiche Web-API-Organisation:
Controller
Klasse bereit, die mit einem der RoutModule
-Attribute dekoriert istAddApplicationPart(…)
MapModuleRoute(…)
namespace My.Module.Namespace {
[RouteModule(ModuleBaseController.ModuleName)]
public abstract class ModuleBaseController: BaseController
{
public const string ModuleName = "My.Module.Namespace";
}
}
Abgeleitete Controller können ihr Routing auch in einer tragbareren Version ändern
[RouteModule(ModuleBaseController.ModuleName, "some/different/admin/path")]
public class AdminController: ModuleBaseController
{
}
Daher kann die Routing-Coinfig stärker durchgeführt werden als
app.UseMvc(routes =>
{
//...
routes.MapModuleRoute(My.Module.Namespace.ModuleBaseController.ModuleName, "my/module/path");
//...
}
Eine Referenz-App finden Sie in der Beispiel-App dieses Projekts.