SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
Microsoft Community Conference
ASP.NET 4.0 New Features Part 2
URL Routing (ASP.NET WebForms)
한상훈
Taeyo.NET QD 1기
Taeyo.NET ASP.NET 시삽
Microsoft MVP(ASP/ASP.NET)
Microsoft Community Conference
Agenda
• URL에 대한 새로운 이해
• URL Routing?
• URL Routing의 구현
• URL Routing의 핵심! 경로(URL 패턴) 정의
• URL Routing 보안 이슈
• URL Routing 기반의 URL과 매개 변수 활용
• Summary
Microsoft Community Conference
URL에 대한 새로운 이해
• 원칙적인 URL 정의
– URL : Uniform Resource Locator
– 웹사이트에 파일 위치를 표시하는 표준
– 무의미하거나 의미가 애매모호한 값 존재
– 이해하기 어려움
– ex: /shop/products.aspx?category=notebook
• 새로운 URL 정의
– URL : User-friendly Resource Locator
– 사용자와 검색엔진에 친화적(SEO), 이해하기 쉬움
– Easy! Meaningful! Hackable! Effective!
– Ex : /shop/products/notebook
Microsoft Community Conference
• 의미 있고 효율적인 URL
– 사용자가 보다 쉽게 이해하고 기억할 수 있음
– 검색엔진이 검색해야 할 중요한 키워드 포함
• 특정 파일과 매칭되는 URL을 사용할 필요가 없음
– 웹사이트에 파일 구조 및 위치를 노출하지 않음
– 보다 자유롭고 다양한 URL 사용 가능
• 영구적인 사용
– 내부적으로 수정이 발생해도 동일한 URL 사용 가능
URL도 어플리케이션의 일부분
새로운 URL 형식에 장점
Microsoft Community Conference
URL Routing?
• URL 경로를 제어하고 내부적으로 재설정 하는
ASP.NET의 기능
• 실제 파일 위치에 일치하지 않는 URL 요청을 처리할
수 있는 방법 제공
• URL에 생명을 불어 넣어줄 수 있는 마법사
/shop/products.aspx?category=notebook
/shop/products/notebook
URL Routing Magic!
Microsoft Community Conference
URL Routing 구현
• System.Web.Routing 어셈블리 참조
• 경로 구성
– 정의해서 등록하는 URL 패턴이 바로 경로
– 모든 경로는 첫 번째 요청이 실행되기 전에 구성되어야 함
• global.asax에 Application_Start 이벤트 사용
– 경로 구성만으로도 기본적인 URL Routing 구현 완료
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapPageRoute(“SimpleRouting“,
“Simple“,
"~/Demo/SimpleURLRouting.aspx“);
}
Microsoft Community Conference
Demo
ASP.NET URL Routing 구현
Microsoft Community Conference
• 경로 정의 기본 사항
– 경로 구성 시 매개 변수는 중괄호({})로 묶어서 정의
– “/” 문자는 URL 구문 분석 시 구분 기호로 해석
– 항상 고정적인 상수를 지정할 수도 있음
– 구분 기호가 아니고 중괄호로 묶이지 않으면 상수로 취급
– 정의된 경로는 요청된 URL의 Path와 매치
URL Routing의 핵심! 경로(URL 패턴) 정의
/Shop/Products/{id}
http://www.taeyo.net/Shop/Products.aspx?id=123
매개 변수
상수
구분 기호
호스트 Path(경로) 질의 문자열
Microsoft Community Conference
올바른 경로의 예시
• 올바른 경로
• 두 개 이상의 매개 변수를 같이 표시하고 싶을 때는
구분이 가능한 상수 값을 포함해야 함.
– ex : {language}{country}/{action} = 잘못된 경로
• 정의하는 경로에 개수는 무제한
– 명확한 경로일수록 상위에 정의 (단순 Top–Down 처리)
경로 정의 일치하는 URL의 예
{controller}/{action}/{id} /Product/show/beverages
{table}/Detail.aspx /Products/Detail.aspx
blog/{action}/{entry} /blog/show/123
{reporttype}/{year}/{month}/{day} /sales/2010/1/30
{locale}/{action} /ko-kr/show
{language}-{country}/{action} /ko-kr/show
Microsoft Community Conference
• MapPageRoute()
– .Net Framework 4.0에서 등장한 경로 정의 매서드
– 기능상으로는 Add()와 유사
– 보다 쉽고 명확하게 경로를 정의할 수 있는 방법을 제공
새롭게 등장한 경로 정의 메서드
MapPageRoute(string routeName, string routeUrl, string physicalFile)
MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess)
MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess,
RouteValueDictionary defaults)
MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess,
RouteValueDictionary defaults,
RouteValueDictionary constraints)
routeName routeUrl physicalFile checkPhysicalUrlAccess defaults constraints
경로명 경로 (URL 패턴) 실제 파일 위치 권한 확인 URL 구분 기본값 제약 조건
Microsoft Community Conference
MapPageRoute()
• string routeName
– 정의한 경로의 이름
– null 입력은 가능하나 중복은 불가
• string routeUrl
– 경로에 대한 URL 패턴
– 브라우저 주소창에서 실제로 사용되는 URL
MapPageRoute(“DefineRoute", “Define/{value}“, "~/Demo/DefineRoute.aspx",
false,
new RouteValueDictionary { { "value", "1234" } },
new RouteValueDictionary { { "value", @"d{4}" } });
MapPageRoute(“DefineRoute", “Define/{value}“, "~/Demo/DefineRoute.aspx",
false,
new RouteValueDictionary { { "value", "1234" } },
new RouteValueDictionary { { "value", @"d{4}" } });
Microsoft Community Conference
MapPageRoute()
• string physicalFile
– 정의된 경로에 대한 실제 물리적인 파일 위치
• bool checkPhysicalUrlAccess
– 엑세스 권한 확인 절차에서 PhysicalUrl 사용 유/무
– false가 전달되면 요청된 URL의 엑세스 권한을 확인
– 생략할 경우 true가 기본 설정
MapPageRoute(“DefineRoute", “Define/{value}“, "~/Demo/DefineRoute.aspx",
false,
new RouteValueDictionary { { "value", "1234" } },
new RouteValueDictionary { { "value", @"d{4}" } });
MapPageRoute(“DefineRoute", “Define/{value}“, "~/Demo/DefineRoute.aspx",
false,
new RouteValueDictionary { { "value", "1234" } },
new RouteValueDictionary { { "value", @"d{4}" } });
Microsoft Community Conference
MapPageRoute()
• RouteValueDictionary defaults
– 정의된 경로 매개 변수 영역에 기본값 설정
– 값이 넘어오지 않을 경우 설정된 기본값으로 할당됨
– 주소창에 표시되는 URL 자체가 변하는 것은 아님
– “/Define” 형식의 URL이 요청되면 value 값은 기본값 설정
으로 인해 1234가 할당되지만 주소창은 변하지 않음
MapPageRoute(“DefineRoute", “Define/{value}“, "~/Demo/DefineRoute.aspx",
false,
new RouteValueDictionary { { "value", "1234" } },
new RouteValueDictionary { { "value", @"d{4}" } });
Microsoft Community Conference
MapPageRoute()
• RouteValueDictionary constraints
– 요청되는 매개 변수 값에 제약 조건을 적용
– 제약 조건에 충족되지 않으면 처리되지 않음
– 정규식 사용 가능
MapPageRoute(“DefineRoute", “Define/{value}“, "~/Demo/DefineRoute.aspx",
false,
new RouteValueDictionary { { "value", "1234" } },
new RouteValueDictionary { { "value", @"d{4}" } });
Microsoft Community Conference
가변적인 개수의 매개 변수 처리
• 요청된 URL에 매개 변수가 가변적일 경우
• 마지막 매개 변수에 “*”를 표시
– Catch-all 매개 변수로 참조
• 빈 문자열도 처리 가능
• 정의된 경로 기준이라는 것에 주의
– “/Define/itist/Good/Man” 형식의 URL이 요청된다면
– “value” 값은 “itist/Good/Man”
MapPageRoute("DefineRoute", “Define/{*value}“, "~/Demo/DefineRoute.aspx“);
Microsoft Community Conference
Demo
ASP.NET URL Routing 경로 정의
Microsoft Community Conference
URL Routing 보안 이슈
• Routing은 프로세스의 인증 및 권한 부여 이후 실행
– Routing을 통해 전달된 가상 경로는 인증 및 권한 관
련 제어를 받지 않음
• 해결 방법
– checkPhysicalUrlAccess 값을 true로 설정
– Web.config 권한 설정
• Routing 경로 URL에 대해서도 제어가 가능함
<location path="Auth">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
Microsoft Community Conference
Demo
URL Routing 보안 이슈
Microsoft Community Conference
URL Routing의 필살기!
• 사실은 조금 소심한 URL Routing
– 요청된 URL이 모든 정의된 경로와 일치하지 않는다면
매치되는 디스크상에 파일을 찾음
– 정의된 URL과 정확하게 일치하더라도 디스크상에 파
일이 존재한다면 관여하지 않음
• 그래서 준비한 필살기
– 도발
• 디스크 상의 파일보다 Routing이 우선적이게 함
• RouteExistingFiles 속성 사용
RouteTable.Routes.RouteExistingFiles = true;
Microsoft Community Conference
URL Routing의 필살기!
– 회피
• 특정 요청은 Routing 시스템을 회피하도록 함
• Ignore() 메서드 사용
• 그러나 사용할 경우가 많지 않음
– 무엇보다 더 중요한 것은 정상적으로 출력되는 것
– 내부적으로만 의미 있는 URL인 경우를 위해…
• .js, .css 등
RouteTable.Routes.Ignore(“Demo/Ignore");
Microsoft Community Conference
Demo
URL Routing의 필살기!
Microsoft Community Conference
URL Routing 기반의 URL과 매개 변수 활용
• 마크업(.aspx)
– RouteUrl
• 정의된 경로에 매핑되는 URL 생성
– RouteValue
• Routing에 의해 전달받은 매개 변수 값 추출
– <%$ ……... %> 형식에 새로운 표현식 사용
<asp:Label runat="server” ID="searchEmployee“ Text=“<%$RouteValue:name %>“ />
<asp:HyperLink runat="server" ID="searchEmployee"
NavigateUrl=“<%$RouteUrl:name=Nancy %>“>Nancy</asp:HyperLink>
Microsoft Community Conference
• 코드 비하인드(.cs)
– GetRouteUrl()
• 정의된 경로에 매핑되는 URL 생성
– RouteData.Value[“x”]
• Routing에 의해 전달받은 매개 변수 값 추출
• 데이터소스
– 데이터 소스에 매개 변수로 사용 가능
string keyword = RouteData.Values["name"] as string;
string virtualURL = Page.GetRouteUrl("SearchEmployee", new { name = "Robert" });
<asp:RouteParameter Name="FirstName” RouteKey="name” Type="String" />
URL Routing 기반의 URL과 매개 변수 활용
Microsoft Community Conference
Demo
URL Routing 기반의
URL과 매개 변수 활용
Microsoft Community Conference
감사합니다!
무조건 파이팅 입니다!

Contenu connexe

Similaire à ASP.NET 4.0 New Features Part2 - URL Routing(ASP.NET WebForms)

AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
Amazon Web Services Korea
 

Similaire à ASP.NET 4.0 New Features Part2 - URL Routing(ASP.NET WebForms) (20)

ASP.NET 4 New Features
ASP.NET 4 New FeaturesASP.NET 4 New Features
ASP.NET 4 New Features
 
MySQL Document Store를 활용한 NoSQL 개발
MySQL Document Store를 활용한 NoSQL 개발MySQL Document Store를 활용한 NoSQL 개발
MySQL Document Store를 활용한 NoSQL 개발
 
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
 
ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발
 
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with Tajo
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with Tajo
 
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
 
Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3
 
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Catch, Traffic!] : 지하철 혼잡도 및 키워드 분석 데이터 파이프라인 구축
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Catch, Traffic!] : 지하철 혼잡도 및 키워드 분석 데이터 파이프라인 구축제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Catch, Traffic!] : 지하철 혼잡도 및 키워드 분석 데이터 파이프라인 구축
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Catch, Traffic!] : 지하철 혼잡도 및 키워드 분석 데이터 파이프라인 구축
 
과정 커리큘럼
과정 커리큘럼과정 커리큘럼
과정 커리큘럼
 
Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Apache Htrace overview (20160520)
Apache Htrace overview (20160520)
 
스프링 3.0 & RESTful
스프링 3.0 & RESTful스프링 3.0 & RESTful
스프링 3.0 & RESTful
 
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
 
PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
 
한컴MDS_TRACE32를 활용한 DT10 커버리지 측정 방안
한컴MDS_TRACE32를 활용한 DT10 커버리지 측정 방안한컴MDS_TRACE32를 활용한 DT10 커버리지 측정 방안
한컴MDS_TRACE32를 활용한 DT10 커버리지 측정 방안
 
2015 SINVAS USER CONFERENCE - SINVAS 플랫폼을 활용한 정보시스템 유지보수 방안
2015 SINVAS USER CONFERENCE - SINVAS 플랫폼을 활용한 정보시스템 유지보수 방안2015 SINVAS USER CONFERENCE - SINVAS 플랫폼을 활용한 정보시스템 유지보수 방안
2015 SINVAS USER CONFERENCE - SINVAS 플랫폼을 활용한 정보시스템 유지보수 방안
 

Plus de SangHoon Han

Plus de SangHoon Han (19)

ASP.NET Core와 Azure App Service와의 환상적인 만남
ASP.NET Core와 Azure App Service와의 환상적인 만남ASP.NET Core와 Azure App Service와의 환상적인 만남
ASP.NET Core와 Azure App Service와의 환상적인 만남
 
VSO의 매력 터지는 핵심 기능! 클라우드 기반의 성능 분석 도구 Application Insights
VSO의 매력 터지는 핵심 기능! 클라우드 기반의 성능 분석 도구 Application InsightsVSO의 매력 터지는 핵심 기능! 클라우드 기반의 성능 분석 도구 Application Insights
VSO의 매력 터지는 핵심 기능! 클라우드 기반의 성능 분석 도구 Application Insights
 
최신 IT 트렌드, 그리고 Web을 만드는 사람들
최신 IT 트렌드, 그리고 Web을 만드는 사람들최신 IT 트렌드, 그리고 Web을 만드는 사람들
최신 IT 트렌드, 그리고 Web을 만드는 사람들
 
One ASP.NET
One ASP.NETOne ASP.NET
One ASP.NET
 
ASP.NET Web API를 이용한 오픈 API 개발
ASP.NET Web API를 이용한 오픈 API 개발ASP.NET Web API를 이용한 오픈 API 개발
ASP.NET Web API를 이용한 오픈 API 개발
 
나는 웹 크리에이터다! 그리고... 최근 웹 핫이슈!.pdf
나는 웹 크리에이터다! 그리고... 최근 웹 핫이슈!.pdf나는 웹 크리에이터다! 그리고... 최근 웹 핫이슈!.pdf
나는 웹 크리에이터다! 그리고... 최근 웹 핫이슈!.pdf
 
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdfASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf
 
Developer`s Web Standard
Developer`s Web StandardDeveloper`s Web Standard
Developer`s Web Standard
 
Blazor와 안면 트기!
Blazor와 안면 트기!Blazor와 안면 트기!
Blazor와 안면 트기!
 
ASP.NET의 시작(or 재시작)을 어려워하는 이들을 위한 길라잡이
ASP.NET의 시작(or 재시작)을 어려워하는 이들을 위한 길라잡이ASP.NET의 시작(or 재시작)을 어려워하는 이들을 위한 길라잡이
ASP.NET의 시작(or 재시작)을 어려워하는 이들을 위한 길라잡이
 
어서 와~ ASP.NET Core는 처음이지?
어서 와~ ASP.NET Core는 처음이지?어서 와~ ASP.NET Core는 처음이지?
어서 와~ ASP.NET Core는 처음이지?
 
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
 
Intelligent Kiosk와 함께 떠나는 Microsoft Cognitive Services 탐험
Intelligent Kiosk와 함께 떠나는 Microsoft Cognitive Services 탐험Intelligent Kiosk와 함께 떠나는 Microsoft Cognitive Services 탐험
Intelligent Kiosk와 함께 떠나는 Microsoft Cognitive Services 탐험
 
커뮤니티와 함께하는 슬기로운 개발생활
커뮤니티와 함께하는 슬기로운 개발생활커뮤니티와 함께하는 슬기로운 개발생활
커뮤니티와 함께하는 슬기로운 개발생활
 
I am ASP.NET Core Razor Pages
I am ASP.NET Core Razor Pages I am ASP.NET Core Razor Pages
I am ASP.NET Core Razor Pages
 
크로스플랫폼으로 다시 태어난 ASP.NET Core
크로스플랫폼으로 다시 태어난 ASP.NET Core크로스플랫폼으로 다시 태어난 ASP.NET Core
크로스플랫폼으로 다시 태어난 ASP.NET Core
 
두근두근 ASP.NET 5!
두근두근 ASP.NET 5!두근두근 ASP.NET 5!
두근두근 ASP.NET 5!
 
크로스 플랫폼을 지향하는 Alm, 당황하지 않고 vso로 빡! 끝!
크로스 플랫폼을 지향하는 Alm, 당황하지 않고 vso로 빡! 끝!크로스 플랫폼을 지향하는 Alm, 당황하지 않고 vso로 빡! 끝!
크로스 플랫폼을 지향하는 Alm, 당황하지 않고 vso로 빡! 끝!
 
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
 

ASP.NET 4.0 New Features Part2 - URL Routing(ASP.NET WebForms)

  • 1. Microsoft Community Conference ASP.NET 4.0 New Features Part 2 URL Routing (ASP.NET WebForms) 한상훈 Taeyo.NET QD 1기 Taeyo.NET ASP.NET 시삽 Microsoft MVP(ASP/ASP.NET)
  • 2. Microsoft Community Conference Agenda • URL에 대한 새로운 이해 • URL Routing? • URL Routing의 구현 • URL Routing의 핵심! 경로(URL 패턴) 정의 • URL Routing 보안 이슈 • URL Routing 기반의 URL과 매개 변수 활용 • Summary
  • 3. Microsoft Community Conference URL에 대한 새로운 이해 • 원칙적인 URL 정의 – URL : Uniform Resource Locator – 웹사이트에 파일 위치를 표시하는 표준 – 무의미하거나 의미가 애매모호한 값 존재 – 이해하기 어려움 – ex: /shop/products.aspx?category=notebook • 새로운 URL 정의 – URL : User-friendly Resource Locator – 사용자와 검색엔진에 친화적(SEO), 이해하기 쉬움 – Easy! Meaningful! Hackable! Effective! – Ex : /shop/products/notebook
  • 4. Microsoft Community Conference • 의미 있고 효율적인 URL – 사용자가 보다 쉽게 이해하고 기억할 수 있음 – 검색엔진이 검색해야 할 중요한 키워드 포함 • 특정 파일과 매칭되는 URL을 사용할 필요가 없음 – 웹사이트에 파일 구조 및 위치를 노출하지 않음 – 보다 자유롭고 다양한 URL 사용 가능 • 영구적인 사용 – 내부적으로 수정이 발생해도 동일한 URL 사용 가능 URL도 어플리케이션의 일부분 새로운 URL 형식에 장점
  • 5. Microsoft Community Conference URL Routing? • URL 경로를 제어하고 내부적으로 재설정 하는 ASP.NET의 기능 • 실제 파일 위치에 일치하지 않는 URL 요청을 처리할 수 있는 방법 제공 • URL에 생명을 불어 넣어줄 수 있는 마법사 /shop/products.aspx?category=notebook /shop/products/notebook URL Routing Magic!
  • 6. Microsoft Community Conference URL Routing 구현 • System.Web.Routing 어셈블리 참조 • 경로 구성 – 정의해서 등록하는 URL 패턴이 바로 경로 – 모든 경로는 첫 번째 요청이 실행되기 전에 구성되어야 함 • global.asax에 Application_Start 이벤트 사용 – 경로 구성만으로도 기본적인 URL Routing 구현 완료 protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.MapPageRoute(“SimpleRouting“, “Simple“, "~/Demo/SimpleURLRouting.aspx“); }
  • 8. Microsoft Community Conference • 경로 정의 기본 사항 – 경로 구성 시 매개 변수는 중괄호({})로 묶어서 정의 – “/” 문자는 URL 구문 분석 시 구분 기호로 해석 – 항상 고정적인 상수를 지정할 수도 있음 – 구분 기호가 아니고 중괄호로 묶이지 않으면 상수로 취급 – 정의된 경로는 요청된 URL의 Path와 매치 URL Routing의 핵심! 경로(URL 패턴) 정의 /Shop/Products/{id} http://www.taeyo.net/Shop/Products.aspx?id=123 매개 변수 상수 구분 기호 호스트 Path(경로) 질의 문자열
  • 9. Microsoft Community Conference 올바른 경로의 예시 • 올바른 경로 • 두 개 이상의 매개 변수를 같이 표시하고 싶을 때는 구분이 가능한 상수 값을 포함해야 함. – ex : {language}{country}/{action} = 잘못된 경로 • 정의하는 경로에 개수는 무제한 – 명확한 경로일수록 상위에 정의 (단순 Top–Down 처리) 경로 정의 일치하는 URL의 예 {controller}/{action}/{id} /Product/show/beverages {table}/Detail.aspx /Products/Detail.aspx blog/{action}/{entry} /blog/show/123 {reporttype}/{year}/{month}/{day} /sales/2010/1/30 {locale}/{action} /ko-kr/show {language}-{country}/{action} /ko-kr/show
  • 10. Microsoft Community Conference • MapPageRoute() – .Net Framework 4.0에서 등장한 경로 정의 매서드 – 기능상으로는 Add()와 유사 – 보다 쉽고 명확하게 경로를 정의할 수 있는 방법을 제공 새롭게 등장한 경로 정의 메서드 MapPageRoute(string routeName, string routeUrl, string physicalFile) MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess) MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess, RouteValueDictionary defaults) MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess, RouteValueDictionary defaults, RouteValueDictionary constraints) routeName routeUrl physicalFile checkPhysicalUrlAccess defaults constraints 경로명 경로 (URL 패턴) 실제 파일 위치 권한 확인 URL 구분 기본값 제약 조건
  • 11. Microsoft Community Conference MapPageRoute() • string routeName – 정의한 경로의 이름 – null 입력은 가능하나 중복은 불가 • string routeUrl – 경로에 대한 URL 패턴 – 브라우저 주소창에서 실제로 사용되는 URL MapPageRoute(“DefineRoute", “Define/{value}“, "~/Demo/DefineRoute.aspx", false, new RouteValueDictionary { { "value", "1234" } }, new RouteValueDictionary { { "value", @"d{4}" } }); MapPageRoute(“DefineRoute", “Define/{value}“, "~/Demo/DefineRoute.aspx", false, new RouteValueDictionary { { "value", "1234" } }, new RouteValueDictionary { { "value", @"d{4}" } });
  • 12. Microsoft Community Conference MapPageRoute() • string physicalFile – 정의된 경로에 대한 실제 물리적인 파일 위치 • bool checkPhysicalUrlAccess – 엑세스 권한 확인 절차에서 PhysicalUrl 사용 유/무 – false가 전달되면 요청된 URL의 엑세스 권한을 확인 – 생략할 경우 true가 기본 설정 MapPageRoute(“DefineRoute", “Define/{value}“, "~/Demo/DefineRoute.aspx", false, new RouteValueDictionary { { "value", "1234" } }, new RouteValueDictionary { { "value", @"d{4}" } }); MapPageRoute(“DefineRoute", “Define/{value}“, "~/Demo/DefineRoute.aspx", false, new RouteValueDictionary { { "value", "1234" } }, new RouteValueDictionary { { "value", @"d{4}" } });
  • 13. Microsoft Community Conference MapPageRoute() • RouteValueDictionary defaults – 정의된 경로 매개 변수 영역에 기본값 설정 – 값이 넘어오지 않을 경우 설정된 기본값으로 할당됨 – 주소창에 표시되는 URL 자체가 변하는 것은 아님 – “/Define” 형식의 URL이 요청되면 value 값은 기본값 설정 으로 인해 1234가 할당되지만 주소창은 변하지 않음 MapPageRoute(“DefineRoute", “Define/{value}“, "~/Demo/DefineRoute.aspx", false, new RouteValueDictionary { { "value", "1234" } }, new RouteValueDictionary { { "value", @"d{4}" } });
  • 14. Microsoft Community Conference MapPageRoute() • RouteValueDictionary constraints – 요청되는 매개 변수 값에 제약 조건을 적용 – 제약 조건에 충족되지 않으면 처리되지 않음 – 정규식 사용 가능 MapPageRoute(“DefineRoute", “Define/{value}“, "~/Demo/DefineRoute.aspx", false, new RouteValueDictionary { { "value", "1234" } }, new RouteValueDictionary { { "value", @"d{4}" } });
  • 15. Microsoft Community Conference 가변적인 개수의 매개 변수 처리 • 요청된 URL에 매개 변수가 가변적일 경우 • 마지막 매개 변수에 “*”를 표시 – Catch-all 매개 변수로 참조 • 빈 문자열도 처리 가능 • 정의된 경로 기준이라는 것에 주의 – “/Define/itist/Good/Man” 형식의 URL이 요청된다면 – “value” 값은 “itist/Good/Man” MapPageRoute("DefineRoute", “Define/{*value}“, "~/Demo/DefineRoute.aspx“);
  • 16. Microsoft Community Conference Demo ASP.NET URL Routing 경로 정의
  • 17. Microsoft Community Conference URL Routing 보안 이슈 • Routing은 프로세스의 인증 및 권한 부여 이후 실행 – Routing을 통해 전달된 가상 경로는 인증 및 권한 관 련 제어를 받지 않음 • 해결 방법 – checkPhysicalUrlAccess 값을 true로 설정 – Web.config 권한 설정 • Routing 경로 URL에 대해서도 제어가 가능함 <location path="Auth"> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location>
  • 19. Microsoft Community Conference URL Routing의 필살기! • 사실은 조금 소심한 URL Routing – 요청된 URL이 모든 정의된 경로와 일치하지 않는다면 매치되는 디스크상에 파일을 찾음 – 정의된 URL과 정확하게 일치하더라도 디스크상에 파 일이 존재한다면 관여하지 않음 • 그래서 준비한 필살기 – 도발 • 디스크 상의 파일보다 Routing이 우선적이게 함 • RouteExistingFiles 속성 사용 RouteTable.Routes.RouteExistingFiles = true;
  • 20. Microsoft Community Conference URL Routing의 필살기! – 회피 • 특정 요청은 Routing 시스템을 회피하도록 함 • Ignore() 메서드 사용 • 그러나 사용할 경우가 많지 않음 – 무엇보다 더 중요한 것은 정상적으로 출력되는 것 – 내부적으로만 의미 있는 URL인 경우를 위해… • .js, .css 등 RouteTable.Routes.Ignore(“Demo/Ignore");
  • 22. Microsoft Community Conference URL Routing 기반의 URL과 매개 변수 활용 • 마크업(.aspx) – RouteUrl • 정의된 경로에 매핑되는 URL 생성 – RouteValue • Routing에 의해 전달받은 매개 변수 값 추출 – <%$ ……... %> 형식에 새로운 표현식 사용 <asp:Label runat="server” ID="searchEmployee“ Text=“<%$RouteValue:name %>“ /> <asp:HyperLink runat="server" ID="searchEmployee" NavigateUrl=“<%$RouteUrl:name=Nancy %>“>Nancy</asp:HyperLink>
  • 23. Microsoft Community Conference • 코드 비하인드(.cs) – GetRouteUrl() • 정의된 경로에 매핑되는 URL 생성 – RouteData.Value[“x”] • Routing에 의해 전달받은 매개 변수 값 추출 • 데이터소스 – 데이터 소스에 매개 변수로 사용 가능 string keyword = RouteData.Values["name"] as string; string virtualURL = Page.GetRouteUrl("SearchEmployee", new { name = "Robert" }); <asp:RouteParameter Name="FirstName” RouteKey="name” Type="String" /> URL Routing 기반의 URL과 매개 변수 활용
  • 24. Microsoft Community Conference Demo URL Routing 기반의 URL과 매개 변수 활용