ASP.NET MVC 라우팅 개요(VB)

작성 자: Stephen Walther

이 자습서에서 Stephen Walther는 ASP.NET MVC 프레임워크가 브라우저 요청을 컨트롤러 작업에 매핑하는 방법을 보여 줍니다.

이 자습서에서는 ASP.NET 라우팅이라는 모든 ASP.NET MVC 애플리케이션의 중요한 기능을 소개합니다. ASP.NET 라우팅 모듈은 들어오는 브라우저 요청을 특정 MVC 컨트롤러 작업에 매핑합니다. 이 자습서를 마치면 표준 경로 테이블이 요청을 컨트롤러 작업에 매핑하는 방법을 이해할 수 있습니다.

기본 경로 테이블 사용

새 ASP.NET MVC 애플리케이션을 만들 때 애플리케이션은 이미 ASP.NET 라우팅을 사용하도록 구성되었습니다. ASP.NET 라우팅은 두 곳에서 설정됩니다.

먼저 ASP.NET 라우팅은 애플리케이션의 웹 구성 파일(Web.config 파일)에서 사용하도록 설정됩니다. 구성 파일에는 라우팅과 관련된 네 개의 섹션이 있습니다. 즉, system.web.httpModules 섹션, system.web.httpHandlers 섹션, system.webserver.modules 섹션 및 system.webserver.handlers 섹션이 있습니다. 이러한 섹션 라우팅이 없으면 더 이상 작동하지 않으므로 이러한 섹션을 삭제하지 않도록 주의해야 합니다.

둘째, 더 중요한 것은 애플리케이션의 Global.asax 파일에 경로 테이블이 생성됩니다. Global.asax 파일은 ASP.NET 애플리케이션 수명 주기 이벤트에 대한 이벤트 처리기를 포함하는 특수 파일입니다. 경로 테이블은 Application Start 이벤트 중에 만들어집니다.

목록 1의 파일에는 ASP.NET MVC 애플리케이션에 대한 기본 Global.asax 파일이 포함되어 있습니다.

목록 1 - Global.asax.vb

' Note: For instructions on enabling IIS6 or IIS7 classic mode, 
' visit https://go.microsoft.com/?LinkId=9394802

Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

        ' MapRoute takes the following parameters, in order:
        ' (1) Route name
        ' (2) URL with parameters
        ' (3) Parameter defaults
        routes.MapRoute( _
            "Default", _
            "{controller}/{action}/{id}", _
            New With {.controller = "Home", .action = "Index", .id = ""} _
        )

    End Sub

    Sub Application_Start()
        RegisterRoutes(RouteTable.Routes)
    End Sub
End Class

MVC 애플리케이션이 처음 시작되면 Application_Start() 메서드가 호출됩니다. 이 메서드는 RegisterRoutes() 메서드를 호출합니다. RegisterRoutes() 메서드는 경로 테이블을 만듭니다.

기본 경로 테이블에는 단일 경로(Default라는 이름)가 포함되어 있습니다. 기본 경로는 URL의 첫 번째 세그먼트를 컨트롤러 이름, URL의 두 번째 세그먼트를 컨트롤러 작업에 매핑하고, 세 번째 세그먼트는 id라는 매개 변수에 매핑합니다.

웹 브라우저의 주소 표시줄에 다음 URL을 입력한다고 상상해 보세요.

/Home/Index/3

기본 경로는 이 URL을 다음 매개 변수에 매핑합니다.

  • 컨트롤러 = 홈

  • action = Index

  • id = 3

URL /Home/Index/3을 요청하면 다음 코드가 실행됩니다.

HomeController.Index(3)

기본 경로에는 세 가지 매개 변수 모두에 대한 기본값이 포함됩니다. 컨트롤러를 제공하지 않으면 컨트롤러 매개 변수가 기본적으로 Home 값으로 설정됩니다. 작업을 제공하지 않으면 작업 매개 변수는 기본적으로 Index 값으로 설정됩니다. 마지막으로 ID를 제공하지 않으면 ID 매개 변수가 기본적으로 빈 문자열로 설정됩니다.

기본 경로가 URL을 컨트롤러 작업에 매핑하는 방법의 몇 가지 예를 살펴보겠습니다. 브라우저 주소 표시줄에 다음 URL을 입력한다고 상상해 보세요.

/홈

기본 경로 매개 변수 기본값으로 인해 이 URL을 입력하면 목록 2에서 HomeController 클래스의 Index() 메서드가 호출됩니다.

목록 2 - HomeController.vb

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index(ByVal id As String)
        Return View()
    End Function

End Class

목록 2에서 HomeController 클래스에는 Id라는 단일 매개 변수를 허용하는 Index()라는 메서드가 포함되어 있습니다. URL /Home을 사용하면 Index() 메서드가 Id 매개 변수의 값으로 Nothing 값으로 호출됩니다.

MVC 프레임워크가 컨트롤러 작업을 호출하는 방식으로 인해 URL /Home은 목록 3에서 HomeController 클래스의 Index() 메서드와도 일치합니다.

목록 3 - HomeController.vb(매개 변수가 없는 인덱스 작업)

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

End Class

목록 3의 Index() 메서드는 매개 변수를 허용하지 않습니다. URL /Home을 사용하면 이 Index() 메서드가 호출됩니다. URL /Home/Index/3도 이 메서드를 호출합니다(ID는 무시됨).

URL /Home은 목록 4에서 HomeController 클래스의 Index() 메서드와도 일치합니다.

목록 4 - HomeController.vb(nullable 매개 변수를 사용하여 인덱스 작업)

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index(ByVal id? As Integer)
        Return View()
    End Function

End Class

목록 4에서 Index() 메서드에는 하나의 Integer 매개 변수가 있습니다. 매개 변수는 nullable 매개 변수이므로(Nothing 값을 가질 수 있음) 오류가 발생하지 않고 Index()를 호출할 수 있습니다.

마지막으로 URL /Home을 사용하여 목록 5에서 Index() 메서드를 호출하면 Id 매개 변수가 nullable 매개 변수 가 아니 므로 예외가 발생합니다. Index() 메서드를 호출하려고 하면 그림 1에 오류가 표시됩니다.

목록 5 - HomeController.vb(Id 매개 변수가 있는 인덱스 작업)

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index(ByVal id As Integer)
        Return View()
    End Function

End Class

매개 변수 값이 필요한 컨트롤러 작업 호출

그림 01: 매개 변수 값이 필요한 컨트롤러 작업 호출(전체 크기 이미지를 보려면 클릭)

반면 URL /Home/Index/3은 목록 5의 인덱스 컨트롤러 작업에서 잘 작동합니다. /Home/Index/3 요청은 값이 3인 Id 매개 변수를 사용하여 Index() 메서드를 호출합니다.

요약

이 자습서의 목표는 ASP.NET 라우팅에 대한 간략한 소개를 제공하는 것이었습니다. 새 ASP.NET MVC 애플리케이션을 사용하여 가져오는 기본 경로 테이블을 검토했습니다. 기본 경로가 URL을 컨트롤러 작업에 매핑하는 방법을 알아보았습니다.