MVC 5의 속성 라우팅
MVC 5 이전 routes.MapRoute(...)
에는 RouteConfig.cs 파일 을 호출 하여 URL을 특정 작업 및 컨트롤러에 매핑 할 수있었습니다 . 여기에 홈페이지 URL이 저장됩니다 ( Home/Index
). 그러나 아래와 같이 기본 경로를 수정하면
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
이는 다른 작업 및 컨트롤러의 URL에 영향을 미칩니다. 예를 들어 컨트롤러 클래스라는 이름이 ExampleController
있고 그 안에 라는 작업 메서드가있는 경우 기본 경로가 변경 되었기 때문에 DoSomething
예상되는 기본 URL ExampleController/DoSomething
이 더 이상 작동하지 않습니다.
이에 대한 해결 방법은 기본 경로를 엉망으로 만들고 다른 작업 및 컨트롤러에 대해 RouteConfig.cs 파일에 새 경로를 만드는 것입니다.
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Example",
url: "hey/now",
defaults: new { controller = "Example", action = "DoSomething", id = UrlParameter.Optional }
);
이제 클래스 의 DoSomething
액션이 ExampleController
url에 매핑됩니다 hey/now
. 그러나 이것은 다른 작업에 대한 경로를 정의하고 싶을 때마다 지루할 수 있습니다. 따라서 MVC 5에서는 URL을 이와 같은 작업에 일치시키는 속성을 추가 할 수 있습니다.
public class HomeController : Controller
{
// url is now 'index/' instead of 'home/index'
[Route("index")]
public ActionResult Index()
{
return View();
}
// url is now 'create/new' instead of 'home/create'
[Route("create/new")]
public ActionResult Create()
{
return View();
}
}