요약
ASP.NET URL 라우팅:
http://www.url.com/ID => http://www.url.com/Default.aspx?ID=ID
 http://www.url.com/abc => http://www.url.com/Default.aspx?ID=abc
 http://www.url.com/cba => http://www.url.com/Default.aspx?ID=cba
해결책: One ASP.NET(Web Forms & MVC)
 
소개
사이트를 운영함에 있어서, 사용자 ID 또는 특정값을 URL로 요청하여 그에 해당하는 추가적인 리디렉션 등이 필요한 경우가 있는데,
http://url.com/CommunityName 요청시 http://url.com/Default.aspx?name=CommunityName 식으로 이동해야하는 기능을 구현시 본 아티클이 도움이 된다.
 
따라하기
(1) Visual Studio 2013을 사용하여 One ASP.NET(Web Forms & MVC) 웹 프로젝트 생성
 
(2) App_Start/RouteConfig.cs에 라우팅 추가
using System.Web.Mvc;
using System.Web.Routing;
namespace WebUrlRouting
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            // 웹 사이트 루트의 라우트 경로는 무시
            routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
            // 라우트 경로 추가
            routes.MapRoute(
                name: "GoRedirect",
                url: "{community}",
                defaults: new { controller = "Go", action = "Index" }
            );
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}
 
 
(3)(1) Controllers/GoController.cs 파일 생성 및 Index 액션 메서드 변경
using System.Web.Mvc;
namespace WebUrlRouting.Controllers
{
    public class GoController : Controller
    {
        // GET: Go
        public ActionResult Index(string community)
        {
            // 세션변수를 사용하여 사용자별 특정 기능 수행
            Session["Community"] = community; 
            // 특정 페이지로 이동
            return Redirect("~/Default.aspx?community=" + community);
        }
    }
}
 
(3)(2) 만약, 특정 문자열 값에 해당하는 자료만을 기준으로 URL 라우팅 기능을 구현하고자 한다면, 아래 코드와 같이 Go 컨트롤러의 Index 액션 메서드에 필터링 코드를 추가하면 된다.
        public ActionResult Index(string community)
        {
            // Communities 테이블에서 넘겨온 community 변수의 값이 CommunityName 필드에 있는지 확인 있으면 해당 값으로 출력/이동시키고, 그렇지 않으면 FileNotFound 기능 구현
            string[] communities = { "데브렉", "GOT7", "2PM", "2AM" };
            // 배열 또는 데이터베이스에 들어있지 않은 커뮤니티명이 넘겨온다면, 404 에러 출력
            if (!communities.Contains(community, StringComparer.OrdinalIgnoreCase))
            {
                return new HttpNotFoundResult(); 
            }
            // 세션변수를 사용하여 사용자별 특정 기능 수행
            Session["COMMUNITY"] = community;
            // 특정 페이지로 이동: 해당 페이지로 이동 후 community 변수에 해당하는 내용만 보이기 기능 구현
            return Redirect("~/MainPage.aspx?Community=" + community);
        }
 
 
(4) 웹 브라우저에서 테스트
~/2PM => ~/Default.aspx?community=2PM 식으로 이동됨을 확인
 
마무리
추가적으로 현재 로직을 잘 응용하면,
tinyurl.com, bit.ly과 같은 Shorten URL 기능을 구현할 수 있다.
url.com/A1C2a => http://www.dotnetkorea.com/ 식으로 이동할 수 있게 가능
 
끝.