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