MrBogomips.AspNetMvc.ModuleRouting
1.0.0
이 패키지는 모듈식 Web Api를 개발해야 할 필요성에서 비롯되었습니다.
Asp.Net Core는 애플리케이션 파트를 통해 코드를 모듈화하고 호스팅 앱 내에서 쉽게 집계할 수 있습니다.
대조적으로 라우팅에 대한 지원은 약간 너무 호스트적입니다.
Area 는 일종의 지원을 제공하지만 WebApi 라우팅을 정의하는 선택적 방법인 Annotated 라우팅과 혼합할 수 없습니다.
이 패키지는 격차를 메우는 것을 목표로 합니다.
모듈화된 앱 개발과 함께 유용성을 가장 잘 보여 주더라도 모듈 방식 스타일로 라우팅 구성을 유지하는 대체 방법으로 사용할 수도 있습니다.
솔루션 내에서 이 패키지를 복제, 삭제 또는 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");
//...
}
참조 앱을 보려면 이 프로젝트의 샘플 앱을 확인하세요.