요약
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/ 식으로 이동할 수 있게 가능
끝.