다음을 통해 공유


경로 제약 조건 만들기(VB)

작성 자: Stephen Walther

이 자습서에서 Stephen Walther는 정규식을 사용하여 경로 제약 조건을 만들어 브라우저 요청이 경로와 일치하는 방법을 제어하는 방법을 보여 줍니다.

경로 제약 조건을 사용하여 특정 경로와 일치하는 브라우저 요청을 제한합니다. 정규식을 사용하여 경로 제약 조건을 지정할 수 있습니다.

예를 들어 Global.asax 파일의 목록 1에서 경로를 정의한다고 상상해 보십시오.

목록 1 - Global.asax.vb

routes.MapRoute( _
    "Product", _
    "Product/{productId}", _
    New With {.controller = "Product", .action = "Details"} _
)

목록 1에는 Product라는 경로가 포함되어 있습니다. 제품 경로를 사용하여 브라우저 요청을 목록 2에 포함된 ProductController에 매핑할 수 있습니다.

목록 2 - Controllers\ProductController.vb

Public Class ProductController
    Inherits System.Web.Mvc.Controller
    Function Details(ByVal productId As Integer) As ActionResult
        Return View()
    End Function
End Class

Product 컨트롤러에서 노출하는 Details() 작업은 productId라는 단일 매개 변수를 허용합니다. 이 매개 변수는 정수 매개 변수입니다.

목록 1에 정의된 경로는 다음 URL 중 하나와 일치합니다.

  • /Product/23
  • /Product/7

아쉽게도 경로는 다음 URL과도 일치합니다.

  • /Product/blah
  • /Product/apple

Details() 작업에는 정수 매개 변수가 예상되므로 정수 값이 아닌 다른 항목이 포함된 요청을 수행하면 오류가 발생합니다. 예를 들어 브라우저에 URL /Product/apple을 입력하면 그림 1의 오류 페이지가 표시됩니다.

새 프로젝트 대화 상자

그림 01: 페이지가 폭발하는 모습(전체 크기 이미지를 보려면 클릭)

실제로 수행하려는 작업은 적절한 정수 productId를 포함하는 URL만 일치시키는 것입니다. 경로를 정의할 때 제약 조건을 사용하여 경로와 일치하는 URL을 제한할 수 있습니다. 목록 3의 수정된 제품 경로에는 정수와만 일치하는 정규식 제약 조건이 포함되어 있습니다.

목록 3 - Global.asax.vb

routes.MapRoute( _
   "Product", _
   "Product/{productId}", _
   New With {.controller = "Product", .action = "Details"}, _
   New With {.productId = "\d+"} _
)

정규식 \d+는 하나 이상의 정수와 일치합니다. 이 제약 조건으로 인해 Product 경로는 다음 URL과 일치합니다.

  • /Product/3
  • /Product/8999

하지만 다음 URL은 아닙니다.

  • /Product/apple
  • /Product

이러한 브라우저 요청은 다른 경로에서 처리되거나 일치하는 경로가 없으면 리소스를 찾을 수 없음 오류가 반환됩니다.