Este paquete surge de la necesidad de desarrollar una Web Api modular.
Asp.Net Core, a través de Application Parts, le permite modularizar el código y agregarlo fácilmente dentro de una aplicación de alojamiento.
El soporte para enrutamiento, por el contrario, es demasiado hostil.
Las áreas brindan algún tipo de soporte, pero no se pueden combinar con el enrutamiento anotado, que es la forma electiva de definir un enrutamiento WebApi.
Este paquete pretende llenar el vacío.
Incluso si muestra su utilidad en el mejor de los casos junto con el desarrollo de aplicaciones modularizadas, también puede usarlo como una forma alternativa de mantener la configuración de enrutamiento en un estilo de módulo.
Clona, elimina o Nuget este paquete dentro de tu solución.
Identificación de artefactos de Nuget: MrBogomips.AspNetMvc.ModuleRouting
.
Aquí asigna módulos a plantillas de ruta.
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");
});
}
Dentro de tu controlador simplemente lo decoras:
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";
}
}
y listo...
Recuerde que solo está usando la sintaxis de la plantilla de enrutamiento MVC, por lo tanto, puede usar cualquier plantilla de cadena que tenga sentido para Asp.Net MVC. Por ejemplo:
[RouteModule("ModuleName")]
: simplemente define la dependencia de enrutamiento del módulo[RouteModule("ModuleName", "custom/segment")]
: el custom/segnment
se agregará a la plantilla de enrutamiento del módulo[RouteModule("ModuleName", "[controller]")]
: el nombre del controlador se agregará a la plantilla de enrutamiento del módulo[RouteModule("ModuleName", "[action]")]
: el nombre de la acción se agregará a la plantilla de enrutamiento del módulo ... para una organización Web Api amplia y compleja:
Controller
base decorada con uno de los atributos RoutModule
.AddApplicationPart(…)
MapModuleRoute(…)
namespace My.Module.Namespace {
[RouteModule(ModuleBaseController.ModuleName)]
public abstract class ModuleBaseController: BaseController
{
public const string ModuleName = "My.Module.Namespace";
}
}
Los controladores derivados también pueden modificar su enrutamiento de una manera más portátil
[RouteModule(ModuleBaseController.ModuleName, "some/different/admin/path")]
public class AdminController: ModuleBaseController
{
}
Por lo tanto, el enrutamiento de monedas se puede lograr con mayor fuerza como
app.UseMvc(routes =>
{
//...
routes.MapModuleRoute(My.Module.Namespace.ModuleBaseController.ModuleName, "my/module/path");
//...
}
Para obtener una aplicación de referencia, consulte la aplicación de muestra de este proyecto.