방법: 라우팅 정의

Visual Studio 2010

업데이트: 2007년 11월

ASP.NET 라우팅은 웹 사이트의 실제 파일에 매핑되지 않는 URL 요청을 처리하는 데 사용됩니다. URL 패턴을 정의하고 요청에 대한 응답으로 호출되는 처리기를 지정하여 라우팅 경로를 만듭니다.

경로를 정의할 때는 URL 요청에 매개 변수가 없는 경우에 사용할 수 있는 값을 제공하는 기본값을 지정할 수 있습니다. 매개 변수에 유효한 값이 포함되도록 제약 조건을 지정할 수도 있습니다.

라우팅을 사용하면 하이퍼링크의 URL을 동적으로 만드는 것처럼 응용 프로그램에서 URL을 생성할 수 있습니다. 지정한 매개 변수와 일치하는 경로 정의가 여러 개 있는 URL이 만들어질 수 있습니다. 이러한 경우 경로를 등록할 때 지정한 경로 이름을 제공하는 방법으로 URL을 만들 때 사용되는 경로를 지정할 수 있습니다..

URL 패턴과 일치하는 경로를 만들고 해당 URL 패턴에 대한 요청을 처리하는 방법을 지정합니다.

경로를 만들려면

  1. Route 클래스의 인스턴스를 만드는 메서드를 Global.asax 파일에 추가합니다. 클래스 생성자에서 URL 요청을 일치시키는 기준으로 사용할 URL 패턴을 url 매개 변수에 설정하고, 요청을 처리하는 클래스의 인스턴스를 routeHandler 매개 변수에 설정합니다.

    요청에 포함된 매개 변수가 경로에 정의된 매개 변수보다 많은 경우에도 URL 요청과 경로를 일치시키려면 URL 패턴에 catch-all 매개 변수를 추가할 수 있습니다. catch-all 매개 변수를 추가하려면 마지막 매개 변수의 이름 앞에 별표(*)를 추가합니다.

  2. 경로 매개 변수에 기본값을 지정하려면 Defaults 속성을 설정합니다.

  3. 경로 매개 변수 값의 유효성을 확인하려면 Constraints 속성을 다음 중 하나로 설정합니다.

    • 정규식을 정의하는 문자열. 정규식은 대소문자를 구분합니다.

    • Match 메서드가 포함된 IRouteConstaint 인터페이스를 구현하는 개체

  4. RouteTable 개체의 Routes 속성에 Route 개체를 추가합니다. 경로 이름을 지정하려면 Add 메서드를 호출하고, 그렇지 않으면 Add 메서드를 호출합니다.

  5. 첫 번째 단계에서 추가한 메서드를 Global.asax 파일의 Application_Start 처리기에서 호출합니다.

다음 예제에서는 Global.asax 파일의 Application_Start에서 호출되는 RegisterRoutes라는 메서드를 보여 줍니다. 이 메서드는 연도 및 로캘 매개 변수 모두 있는 Route 개체 두 개를 추가합니다. URL을 생성하면 이름으로 경로를 구분할 수 있습니다. 이 예제에서는 이러한 경로를 명명된 경로로 추가하는 방법을 보여 줍니다. 경로에는 제약 조건, 기본값 및 catch-all 매개 변수도 있습니다.

protected void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Add("SalesRoute", new Route
    (
         "SalesReport/{locale}/{year}/{*queryvalues}"
         , new SalesRouteHandler()
    )
       {
          Constraints = new RouteValueDictionary 
          {{"locale", "[a-z]{2}-[a-z]{2}"},{"year", @"\d{4}"}},
          Defaults = new RouteValueDictionary 
           {{"locale", "en-US"}, {"year", DateTime.Now.Year.ToString()}}
       });
    routes.Add("ExpensesRoute", new Route
    (
         "ExpensesReport/{locale}/{year}/{*queryvalues}"
         , new ExpensesRouteHandler()
    )
       {
          Constraints = new RouteValueDictionary 
          {{"locale", "[a-z]{2}-[a-z]{2}"},{"year", @"\d{4}"}},
          Defaults = new RouteValueDictionary 
           {{"locale", "en-US"}, {"year", DateTime.Now.Year.ToString()}}
       });
}
표시: