경로 제약 조건 만들기(C#)

작성자 : Stephen Walther

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

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

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

목록 1 - Global.asax.cs

routes.MapRoute(
    "Product",
    "Product/{productId}",
    new {controller="Product", action="Details"}
);

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

목록 2 - Controllers\ProductController.cs

using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
    public class ProductController : Controller
    {
        public ActionResult Details(int productId)
        {
            return View();
        }
    }
}

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.cs

routes.MapRoute(
    "Product",
    "Product/{productId}",
    new {controller="Product", action="Details"},
    new {productId = @"\d+" }
 );

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

  • /Product/3
  • /Product/8999

하지만 다음 URL은 그렇지 않습니다.

  • /Product/apple

  • /Product

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