ASP.NET 4.0 New Features Part2 - URL Routing(ASP.NET WebForms)
19 Mar 2023•0 j'aime
0 j'aime
Soyez le premier à aimer ceci
afficher plus
•191 vues
vues
Nombre de vues
0
Sur Slideshare
0
À partir des intégrations
0
Nombre d'intégrations
0
Télécharger pour lire hors ligne
Signaler
Technologie
[2010 TAEYO.NET 신년 세미나]에서 발표한 "ASP.NET 4.0 New Features Part 2 - URL Routing (ASP.NET WebForms)" 세션의 발표 자료입니다.
※ 이 자료는 오래전 진행한 내용을 다루고 있습니다. 작성 시점 혹은 이후라면 유용하지 않을 수 있으니 참고 부탁드립니다.
ASP.NET 4.0 New Features Part2 - URL Routing(ASP.NET WebForms)
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
• 경로 정의 기본 사항
– 경로 구성 시 매개 변수는 중괄호({})로 묶어서 정의
– “/” 문자는 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
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
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
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과 매개 변수 활용