내용 보기

작성자

관리자 (IP : 172.17.0.1)

날짜

2020-07-09 05:08

제목

[ASP.NET MVC] ASP.NET MVC모델에서 Controller명과 동일한 이름으로 라우팅하기


GameController라는 이름의 컨트롤러가 존재할때 기본 라우팅을 따른다면 /Game(컨트롤러명)/Detail(액션명)/12(전달값)으로 라우팅을 하게 된다. 하지만 Detail이라는 액션명을 생략하고 /Game/12 형식으로 라우팅을 하고 싶을때가 있다.

Global.asax에 신규 라우팅룰을 추가 하면 되지만, 이때 GameController가 존재하기 때문에 기본 라우팅 테이블가 중복되어 다른 액션 /Game/Regist 등도 신규로 추가한 라우팅룰을 따르게 된다.

이 문제를 해결하기 위해서는 새로 추가하는 라우팅 룰에 숫자만 받아들인 다는 제약을 걸어주면 해결이 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        "GameDetail",
        "Game/{gameId}",
        new { controller = "Game", action = "Detail" },
        new { gameId = @"\d+" }
    );
 
    routes.MapRoute(
        "Default",                                              // Route name
        "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
    );
}
cs

위와 같이 설정하면, /Game/숫자 로 들어오는 요청은 GameController의 Detail 액션이 처리하고 그외의 요청은 기본 라우팅룰을 따르게 된다.

출처1

출처2