تنشأ هذه الحزمة من الحاجة إلى تطوير Web Api المعياري.
يسمح لك Asp.Net Core، من خلال أجزاء التطبيق، بتقسيم التعليمات البرمجية وتجميعها بسهولة داخل تطبيق الاستضافة.
يعد دعم التوجيه، في cotrast، استضافة إلى حد ما.
توفر المناطق نوعًا من الدعم ولكنها غير قابلة للخلط مع التوجيه المشروح والذي يعد الطريقة الاختيارية لتحديد توجيه WebApi.
وتهدف الحزمة ثي إلى سد الفجوة.
حتى لو أظهرت فائدتها في أحسن الأحوال بالاقتران مع تطوير التطبيقات المعيارية، يمكنك أيضًا استخدامها كطريقة بديلة للحفاظ على تكوين التوجيه بأسلوب الوحدة النمطية.
قم باستنساخ هذه الحزمة أو إسقاطها أو Nuget ضمن الحل الخاص بك.
معرف Nuget Artifacts: 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 المعقدة والواسعة:
Controller
أساسية مزينة بإحدى سمات RoutModule
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
{
}
ولذلك يمكن تحقيق تكوين العملة التوجيه بقوة أكبر
app.UseMvc(routes =>
{
//...
routes.MapModuleRoute(My.Module.Namespace.ModuleBaseController.ModuleName, "my/module/path");
//...
}
للحصول على تطبيق مرجعي، قم بمراجعة نموذج التطبيق لهذا المشروع.