728x90
300x250

[ASP.NET 4] RouteMap 기술 - URL 단축하기 + 매개변수 처리

ASP.NET Framework 4에 와서 Routing 기술은 더욱 강화되었습니다.
IIS 서버 기술 Rewrite에서 벗어나 완전한 Routing 기술을 제공합니다. URL Routing Process는 다음과 같이 동작합니다.



Figure 1) URL Routing Processing


1. 왜 URL Routing을 도입해야 하는가?

첫째로는, 사용자가 기억하기 좋은 어휘로 전환할 수 있습니다.
둘째로는, 주소가 간결해집니다.
셋째로는, 웹 사이트 구조가 가상화됩니다.
(즉, 물리 주소의 노출이 줄어듭니다.)
넷째로는, 해킹 가능한 상태에서 벗어나게 해줍니다.


2. ASP.NET 4.0에서의 URL Routing


ASP.NET 4.0은 우리에게 메커니즘을 라우팅 전체 URL을 처리하는 단순하고 강력한 방법을 제공합니다.
앞에서 설명한 대로, 라우팅 URL을 제공하기 위해 ASP.NET은 이제 수많은 클래스를 갖춘 방법 중 여러 쉽게 물리적 파일과 URL을 단순하게 사용할 수 있도록 기능을 제공합니다. 우리는 Framework 4의 라이브러리를 사용하여 적용할 수 있습니다.



Figure 2-1) ASP.NET 4.0 URL Routing 흐름

이쯤에서 알아야 할 구현에 대한 구조는 정리하겠습니다.
서버 관리자와 프로그래머가 동시에 알아야 하는 ASP.NET의 구현구조에 대해서는 제외하였습니다.


3. 구현

 번호 파일명 매개변수  URL Routing 주소 
 1 index.aspx Bookstore
 2 index.aspx name Bookstore/name
 3 index.aspx name, age  Bookstore/name/age

[솔루션 파일 구성]
index.aspx
web.config
Global.asax

Global.asax 코드


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Routing;
using System.Web.Security;
using System.Web.SessionState;
namespace WebApplication1
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            RouteTable.Routes.MapPageRoute("StoreRoute1", "BookStore", "~/index.aspx", false);
            RouteTable.Routes.MapPageRoute("StoreRoute2", "BookStore/{name}", "~/index.aspx", false);
            RouteTable.Routes.MapPageRoute("StoreRoute3", "BookStore/{name}/{age}", "~/index.aspx", false);
        }
        protected void Session_Start(object sender, EventArgs e)
        {
        }
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
        }
        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {
        }
        protected void Application_Error(object sender, EventArgs e)
        {
        }
        protected void Session_End(object sender, EventArgs e)
        {
        }
        protected void Application_End(object sender, EventArgs e)
        {
        }
    }
}

참고)

'RouteTable.Routes.MapPageRoute("StoreRoute2", "BookStore/{name}", "~/index.aspx", false);'만 가지고 출력한다고 가정했을 때, http://localhost:포트번호/BookStore/{name}으로 접속할 수 있습니다.
단, 하위 주소인 http://localhost:포트번호/BookStore로 접속할 수 없습니다.

이 예제에서는 그러한 것을 보완한 예제를 설명하였습니다.

index.aspx 코드


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="WebApplication1.index" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="sample1" Text="Null" runat="server"></asp:Label><br />
        <asp:Label ID="sample2" Text="Null" runat="server"></asp:Label>
        <br />
        <asp:HyperLink ID="text" runat="server" NavigateUrl="~/Bookstore/Cakeon/aaa" Text="야호"></asp:HyperLink>
    </div>
    </form>
</body>
</html>



index.aspx.cs 코드


protected void Page_Load(object sender, EventArgs e)
{
            string name = Page.RouteData.Values["Name"] as string;
sample1.Text = name;
string age = Page.RouteData.Values["Age"] as string;
sample2.Text = age;
}




4. 동작 화면




5. 참고자료(Reference)

1. http://www.codeproject.com/KB/aspnet/asp_net4_0_URLRouting.aspx, 접속일자 2011-01-28

반응형

+ Recent posts