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
属性の 1 つで装飾された基本Controller
クラスを提供します。AddApplicationPart(…)
によってホスト アプリ内のモジュールを集約します。MapModuleRoute(…)
でモジュラー ルーティングを構成します。 namespace My.Module.Namespace {
[RouteModule(ModuleBaseController.ModuleName)]
public abstract class ModuleBaseController: BaseController
{
public const string ModuleName = "My.Module.Namespace";
}
}
派生コントローラーは、より移植性の高い方法でルーティングを調整することもできます。
[RouteModule(ModuleBaseController.ModuleName, "some/different/admin/path")]
public class AdminController: ModuleBaseController
{
}
したがって、coinfig のルーティングは次のようにより強力に実行できます。
app.UseMvc(routes =>
{
//...
routes.MapModuleRoute(My.Module.Namespace.ModuleBaseController.ModuleName, "my/module/path");
//...
}
リファレンス アプリについては、このプロジェクトのサンプル アプリを確認してください。