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