Este pacote surge da necessidade de desenvolver uma Web Api modular.
Asp.Net Core, por meio de Application Parts, permite modularizar o código e agregá-lo facilmente em um aplicativo de hospedagem.
O suporte para roteamento, em contrapartida, é um pouco hostis.
Area s fornecem algum tipo de suporte, mas não podem ser misturados com o roteamento anotado, que é a forma eletiva de definir um roteamento WebApi.
Este pacote visa preencher a lacuna.
Mesmo que mostre sua utilidade, na melhor das hipóteses, em conjunto com o desenvolvimento de aplicativos modularizados, você também pode usá-lo como uma forma alternativa de manter a configuração de roteamento em um estilo de módulo.
Clone, descarte ou Nuget este pacote em sua solução.
ID de artefatos Nuget: MrBogomips.AspNetMvc.ModuleRouting
.
Aqui você mapeia módulos para modelos de rota.
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 do seu controlador você simplesmente o decora:
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";
}
}
e pronto…
Lembre-se de que você está apenas usando a sintaxe do modelo de roteamento MVC, portanto, você pode usar qualquer modelo de string que faça sentido para o Asp.Net MVC. Por exemplo:
[RouteModule("ModuleName")]
: simplesmente defina a dependência de roteamento do módulo[RouteModule("ModuleName", "custom/segment")]
: o custom/segnment
será anexado ao modelo de roteamento do módulo[RouteModule("ModuleName", "[controller]")]
: o nome do controlador será anexado ao modelo de roteamento do módulo[RouteModule("ModuleName", "[action]")]
: o nome da ação será anexado ao modelo de roteamento do módulo ... para uma organização ampla e complexa de API da Web:
Controller
decorada com um dos atributos RoutModule
AddApplicationPart(…)
MapModuleRoute(…)
namespace My.Module.Namespace {
[RouteModule(ModuleBaseController.ModuleName)]
public abstract class ModuleBaseController: BaseController
{
public const string ModuleName = "My.Module.Namespace";
}
}
Controladores derivados também podem ajustar seu roteamento de uma forma mais portátil.
[RouteModule(ModuleBaseController.ModuleName, "some/different/admin/path")]
public class AdminController: ModuleBaseController
{
}
Portanto, o roteamento coinfig pode ser realizado de forma mais forte conforme
app.UseMvc(routes =>
{
//...
routes.MapModuleRoute(My.Module.Namespace.ModuleBaseController.ModuleName, "my/module/path");
//...
}
Para um aplicativo de referência, confira o aplicativo de exemplo deste projeto.