방법: Web Forms을 포함한 라우팅 사용
업데이트: 2007년 11월
ASP.NET 라우팅을 사용하면 웹 응용 프로그램의 실제 파일에 매핑되지 않는 URL 요청을 처리할 수 있습니다. 기본적으로 ASP.NET 라우팅은 Dynamic Data용 ASP.NET 응용 프로그램 또는 MVC 프레임워크에서는 사용할 수 있지만 ASP.NET 웹 사이트 프로젝트에서는 사용할 수 없습니다. 따라서 ASP.NET 웹 사이트에서 라우팅을 사용하려면 몇 가지 단계를 수행해야 합니다.
라우팅을 사용하려면 응용 프로그램의 구성 파일을 변경하여 라우팅 어셈블리를 등록하고 UrlRoutingModule 클래스를 모듈로 추가해야 합니다. 경로에 대한 사용자 지정 경로 처리기도 만들어야 합니다. 이 처리기는 IRouteHandler 인터페이스를 구현하고 요청의 실제 끝점이 될 Web Form(.aspx 파일)의 인스턴스를 만듭니다. 마지막으로, 처리기로 처리할 경로를 정의해야 합니다. 이 항목에서는 이러한 단계를 수행하는 방법을 보여 줍니다.
이 기능에 대한 자세한 내용을 보려면 비디오를 참조하십시오.
라우팅을 사용하도록 ASP.NET 웹 사이트 프로젝트를 구성하려면
응용 프로그램의 Web.config 파일에서 다음 예제와 같이 ASP.NET 라우팅 어셈블리를 assemblies 요소에 추가합니다.
<add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
응용 프로그램이 IIS 6.0 또는 IIS 7.0 클래식 모드에서 실행되면 다음 예제와 같이 UrlRoutingModule 클래스를 httpModules 요소에 추가합니다.
<httpModules> <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </httpModules>
응용 프로그램이 IIS 7.0 통합 모드에서 실행되면 다음 예제와 같이 UrlRoutingModule 클래스를 modules 요소에 추가합니다.
<system.webServer> <modules> <remove name="UrlRoutingModule" /> <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </modules> </system.webServer>
응용 프로그램이 IIS 7.0 통합 모드에서 실행되면 다음 예제와 같이 UrlRoutingHandler 클래스를 handlers 요소에 추가합니다.
<system.webServer> <handlers> <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </handlers> </system.webServer>
처리기를 만들려면
IRouteHandler 인터페이스를 구현하는 클래스를 만듭니다.
GetHttpHandler 메서드를 구현합니다. 특정 Web Form(.aspx 파일)을 요청의 끝점으로 지정하려면 GetHttpHandler 메서드에서 해당 Web Form의 인스턴스를 반환합니다.
다음 예제에서는 IRouteHandler 인터페이스를 구현하는 CustomRouteHandler라는 클래스를 보여 줍니다. GetHttpHandler 메서드는 CreateInstanceFromVirtualPath 메서드를 호출하여 지정된 Web Form의 인스턴스를 만듭니다. 이 인스턴스가 요청에 대한 끝점으로 반환됩니다.
Public Class CustomRouteHandler Implements IRouteHandler Private _virtualPath As String Public Sub New(ByVal vPath As String) _virtualPath = vPath End Sub Public Property VirtualPath() As String Get Return _virtualPath End Get Private Set(ByVal value As String) _virtualPath = value End Set End Property Public Function GetHttpHandler(ByVal requestContext _ As System.Web.Routing.RequestContext) _ As System.Web.IHttpHandler _ Implements System.Web.Routing.IRouteHandler.GetHttpHandler Dim redirectPage As IHttpHandler redirectPage = _ BuildManager.CreateInstanceFromVirtualPath(VirtualPath, _ GetType(Page)) Return redirectPage End Function End Class
public class CustomRouteHandler : IRouteHandler { public CustomRouteHandler(string virtualPath) { this.VirtualPath = virtualPath; } public string VirtualPath { get; private set; } public IHttpHandler GetHttpHandler(RequestContext requestContext) { var page = BuildManager.CreateInstanceFromVirtualPath (VirtualPath, typeof(Page)) as IHttpHandler; return page; } }
사용자 지정 처리기를 등록하려면
웹 응용 프로그램에 Global.asax 파일이 없으면 추가합니다.
다음 예제와 같이 System.Web.Routing 네임스페이스를 가져오는 지시문을 Global.asax 파일에 추가합니다.
<%@ Import Namespace="System.Web.Routing" %>
RouteTable 클래스의 Routes 속성에 경로 정의를 추가하는 메서드를 Global.asax 파일에 만듭니다.
Application_Start 이벤트 처리기에서 해당 메서드를 호출합니다.
다음 예제에서는 CustomRouteHandler라는 클래스를 bikes/sale과 일치하는 요청의 처리기로 등록하는 메서드를 보여 줍니다.
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) RegisterRoutes(RouteTable.Routes) End Sub Shared Sub RegisterRoutes(ByVal routes As RouteCollection) routes.Add("BikeSaleRoute", New Route _ ( _ "bikes/sale", New CustomRouteHandler("~/Contoso/Products/Details.aspx") _ )) End Sub
void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); } public static void RegisterRoutes(RouteCollection routes) { routes.Add("BikeSaleRoute", new Route ( "bikes/sale", new CustomRouteHandler("~/Contoso/Products/Details.aspx") )); }