แพ็คเกจนี้เกิดขึ้นจากความจำเป็นในการพัฒนา Web Api แบบโมดูลาร์
Asp.Net Core โดยใช้ Application Parts ช่วยให้คุณสามารถทำให้โค้ดเป็นโมดูลและรวมเข้าด้วยกันภายในแอปโฮสติ้งได้อย่างง่ายดาย
การรองรับการกำหนดเส้นทางใน cotrast นั้นค่อนข้างจะโฮสต์เกินไป
Area ให้การสนับสนุนบางอย่าง แต่ไม่สามารถผสมกับการกำหนดเส้นทางที่มีคำอธิบายประกอบได้ ซึ่งเป็นวิธีเลือกในการกำหนดเส้นทาง WebApi
แพ็คเกจนี้มีจุดมุ่งหมายเพื่อเติมเต็มช่องว่าง
แม้ว่าจะแสดงประโยชน์ได้ดีที่สุดเมื่อใช้ร่วมกับการพัฒนาแอปแบบโมดูลาร์ คุณยังสามารถใช้มันเป็นอีกทางเลือกหนึ่งในการรักษาการกำหนดค่าเส้นทางในรูปแบบโมดูลได้
โคลน วาง หรือ Nuget แพ็คเกจนี้ภายในโซลูชันของคุณ
รหัสสิ่งประดิษฐ์ Nuget: 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";
}
}
et voila…
โปรดจำไว้ว่าคุณเพียงใช้ไวยากรณ์เทมเพลตการกำหนดเส้นทาง MVC ดังนั้น คุณสามารถใช้เทมเพลตสตริงใดก็ได้ที่เหมาะสมสำหรับ Asp.Net MVC ตัวอย่างเช่น:
[RouteModule("ModuleName")]
: เพียงกำหนดการพึ่งพาการกำหนดเส้นทางโมดูล[RouteModule("ModuleName", "custom/segment")]
: แบบ custom/segnment
จะถูกผนวกเข้ากับเทมเพลตการกำหนดเส้นทางโมดูล[RouteModule("ModuleName", "[controller]")]
: ชื่อของคอนโทรลเลอร์จะถูกผนวกเข้ากับเทมเพลตการกำหนดเส้นทางโมดูล[RouteModule("ModuleName", "[action]")]
: ชื่อของการดำเนินการจะถูกผนวกเข้ากับเทมเพลตการกำหนดเส้นทางโมดูล ... สำหรับองค์กร Web Api ที่ซับซ้อนและกว้างขวาง:
Controller
พื้นฐานที่ตกแต่งด้วยหนึ่งในแอตทริบิวต์ RoutModule
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
{
}
ดังนั้นการกำหนดเส้นทาง coinfig สามารถทำได้แข็งแกร่งยิ่งขึ้นเช่น
app.UseMvc(routes =>
{
//...
routes.MapModuleRoute(My.Module.Namespace.ModuleBaseController.ModuleName, "my/module/path");
//...
}
สำหรับแอปอ้างอิง โปรดดูแอปตัวอย่างของโครงการนี้