Paket ini muncul dari kebutuhan untuk mengembangkan Web Api modular.
Asp.Net Core, melalui Bagian Aplikasi memungkinkan Anda memodulasi kode dan dengan mudah menggabungkannya dalam aplikasi hosting.
Sebaliknya, dukungan untuk perutean agak terlalu bermusuhan.
Area memberikan semacam dukungan tetapi tidak dapat dicampur dengan perutean Beranotasi yang merupakan cara elektif untuk menentukan perutean WebApi.
Paket ini bertujuan untuk mengisi kesenjangan tersebut.
Meskipun ini menunjukkan kegunaan terbaiknya dalam kaitannya dengan pengembangan aplikasi termodulasi, Anda juga dapat menggunakannya sebagai cara alternatif untuk mempertahankan konfigurasi perutean dalam gaya modul-gaya.
Kloning, Jatuhkan, atau Nuget paket ini dalam solusi Anda.
ID Artefak Nuget: MrBogomips.AspNetMvc.ModuleRouting
.
Di sini Anda memetakan modul ke template rute.
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");
});
}
Di dalam pengontrol Anda, Anda cukup menghiasnya:
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";
}
}
dan voila…
Ingatlah bahwa Anda hanya menggunakan sintaks templat perutean MVC, oleh karena itu, Anda dapat menggunakan templat string apa pun yang sesuai untuk Asp.Net MVC. Misalnya:
[RouteModule("ModuleName")]
: cukup tentukan ketergantungan perutean modul[RouteModule("ModuleName", "custom/segment")]
: custom/segnment
akan ditambahkan ke templat perutean modul[RouteModule("ModuleName", "[controller]")]
: nama pengontrol akan ditambahkan ke templat perutean modul[RouteModule("ModuleName", "[action]")]
: nama tindakan akan ditambahkan ke templat perutean modul ... untuk organisasi Web Api yang kompleks dan luas:
Controller
dasar yang dihiasi dengan salah satu atribut RoutModule
AddApplicationPart(…)
MapModuleRoute(…)
namespace My.Module.Namespace {
[RouteModule(ModuleBaseController.ModuleName)]
public abstract class ModuleBaseController: BaseController
{
public const string ModuleName = "My.Module.Namespace";
}
}
Pengontrol turunan juga dapat mengubah peruteannya dengan cara yang lebih portabel
[RouteModule(ModuleBaseController.ModuleName, "some/different/admin/path")]
public class AdminController: ModuleBaseController
{
}
Oleh karena itu, routing coinfig dapat dilakukan dengan lebih kuat
app.UseMvc(routes =>
{
//...
routes.MapModuleRoute(My.Module.Namespace.ModuleBaseController.ModuleName, "my/module/path");
//...
}
Untuk aplikasi referensi, lihat Aplikasi Contoh proyek ini.