MrBogomips.AspNetMvc.ModuleRouting
1.0.0
這個包是由於開發模組化 Web Api 的需要而產生的。
Asp.Net Core 透過應用程式元件可讓您模組化程式碼並輕鬆地將它們聚合到託管應用程式中。
相較之下,對路由的支援有點過於主機化。
區域提供某種支持,但不能與註解路由混合,註解路由是定義 WebApi 路由的可選方法。
該計劃旨在填補這一空白。
即使它最多顯示了與模組化應用程式開發結合使用的有用性,您也可以將其用作以模組方式維護路由配置的替代方法。
在您的解決方案中複製、刪除或 Nuget 此套件。
Nuget 工件 ID: MrBogomips.AspNetMvc.ModuleRouting
。
您可以在此處將模組對應到路由模板。
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");
});
}
在你的控制器中,你只需裝飾它:
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";
}
}
瞧…
回想一下,您只是使用 MVC 路由模板語法,因此,您可以使用任何對 Asp.Net MVC 有意義的字串模板。例如:
[RouteModule("ModuleName")]
:簡單定義模組路由依賴項[RouteModule("ModuleName", "custom/segment")]
: custom/segnment
將被附加到模組路由模板中[RouteModule("ModuleName", "[controller]")]
:控制器的名稱將附加到模組路由模板中[RouteModule("ModuleName", "[action]")]
:操作的名稱將附加到模組路由範本中……對於複雜、廣泛的 Web Api 組織:
RoutModule
屬性之一裝飾的基本Controller
類AddApplicationPart(…)
聚合主機應用程式中的模組MapModuleRoute(…)
配置模組化路由 namespace My.Module.Namespace {
[RouteModule(ModuleBaseController.ModuleName)]
public abstract class ModuleBaseController: BaseController
{
public const string ModuleName = "My.Module.Namespace";
}
}
派生控制器還可以在更便攜的 waqy 中調整其路由
[RouteModule(ModuleBaseController.ModuleName, "some/different/admin/path")]
public class AdminController: ModuleBaseController
{
}
因此,路由配置可以更強大地實現為
app.UseMvc(routes =>
{
//...
routes.MapModuleRoute(My.Module.Namespace.ModuleBaseController.ModuleName, "my/module/path");
//...
}
有關參考應用程序,請查看該項目的範例應用程式。