ASP.NET 의 URL Routing 과 IIS 의 URL Rewriting 의 차이

7149 단어 RoutingRewriting
머리말
앞서 2 편의 게시 물이 URL 라 우 팅 의 특성 에 대해 언급 했 지만 URL 라 우 팅 이 URL Rewriting 이 라 고 오해 하 는 사람 이 많 았 다.사실 2 개 모두 비슷 한 기능(우호 적 인 URL 검색 편의 성 향상 으로 수록)을 제공 하지만 2 자의 원리 와 운행 주 기 는 완전히 다르다.이 글 은 구체 적 으로 어떤 차이 가 있 는 지 분석 해 봤 다.
예시
원 리 를 분석 하기 전에 예 를 들 어 테스트 해 보 겠 습 니 다.(IIS URL Rewrite 모듈 은 IIS 7 의 지원 이 필요 합 니 다.)
1.Customer/1 URL 에 대응 하 는 MVC 프로그램 만 들 기
먼저 일반적인 MVC 3 프로그램 을 만 들 고 간단 한 Customer Controller 와 간단 한 Detail action 을 만 듭 니 다.코드 는 다음 과 같 습 니 다.

public class CustomerController : Controller
{
 public ActionResult Detail(string id)
 {
  ViewBag.CustomerID = id;
  return View();
 }
}
우 리 는 단지 하나의 ID 를 간단하게 받 아들 인 후에 ViewBag 에 넣 어서 view 에 표시 할 수 있 습 니 다.view 의 코드 는 다음 과 같 습 니 다.

@{
 Layout = null;
}
<!DOCTYPE html>
<html>
<head>
 <title>Detail</title>
</head>
<body>
 <div>
  MVC     :@ViewBag.CustomerID
 </div>
</body>
</html>
2.customer/1 URL 에 대응 하 는 웹 form 프로그램 만 들 기
같은 솔 루 션 의 루트 디 렉 터 리 에 customer.aspx 파일 을 만 듭 니 다.파일 코드 는 주로 ID 인 자 를 받 아서 페이지 에 표 시 됩 니 다.코드:

public partial class Customer : System.Web.UI.Page
{
 protected void Page_Load(object sender, EventArgs e)
 {
  this.lblId.InnerText = Request.QueryString["id"];
 }
}
html:

<form id="form1" runat="server">
 <div>
 asp.net web form  :<label runat="server" id="lblId"></label>
 </div>
</form>
OK,우 리 는 먼저 Global.aax.cs 에 Customre/1 의 route 를 설정 합 니 다.코드 는 다음 과 같 습 니 다.

routes.MapRoute(
 "CustomerDetail", // Route name
 "Customer/{id}", // URL with parameters
 new { controller = "Customer", action = "Detail", id = UrlParameter.Optional }
);
컴 파일 접근,실행http://localhost/customer/123페이지 표시 결 과 는:
MVC 에서 실행 결과:123.
3.IIS URL 재 작성 설치
다음 주소 로 IIS URL Rewrite 를 다운로드 하고 설치 합 니 다http://www.iis.net/download/URLRewrite성공 적 으로 설치 한 후 MVC 프로젝트 의 웹.config 에 URL 재 작성 규칙 을 설정 합 니 다.코드 는 다음 과 같 습 니 다(system.webServer 노드 주의).

<system.webServer>
 <validation validateIntegratedModeConfiguration="false"/>
 <modules runAllManagedModulesForAllRequests="true"/>
 <directoryBrowse enabled="true" />
 <rewrite>
  <rules>
  <rule name="rewrite customer">
   <match url="^customer/([0-9]+)" />
   <action type="Rewrite" url="customer.aspx?id={R:1}" />
  </rule>
  </rules>
 </rewrite>
</system.webServer>
이 규칙 은 customer/1 과 유사 한 요청 을 customer.aspx?id=1 에 다시 쓰 라 는 뜻 입 니 다.컴 파일 러 는 다음 과 같 습 니 다http://localhost/customer/123페이지 표시 결 과 는 다음 과 같 습 니 다.
asp.net 웹 폼 아래:123
즉,Routing 은 이 럴 때 효과 가 없습니다.URL Rewrite 는 Routing 전에 Customer/123 이라는 주 소 를 Customer.aspx?id=123 으로 전송 하여 aspx 파일 로 요청 을 받 았 기 때 문 입 니 다.두 사람 사이 에 도대체 어떤 주기 로 처리 되 는 지 살 펴 보 자.
원리 주기
1. URL Rewrite
URL Rewrite 는 apache web server 에서 최초 로 보 였 습 니 다.그 당시 에 유행 하 던 url 재 작성 은 phop 을 사용 하 는 사람들 을 미 친 듯 이 기 쁘 게 했 습 니 다.안 타 깝 게 도 asp.net 에서 의 실현 방식 이 매우 복잡 하기 때문에 많은 역 들 이 기본적으로 쓸모 가 없 었 습 니 다.IIS.net 이 정식 IIS URL Rewrite 모듈 을 출시 한 후부 터 이 문 제 를 철저히 해결 하 였 습 니 다.
URL Rewrite 는 request-processing pipeline 의 초기 단계 에서 실 행 됩 니 다.일반적인 주소 가 들 어 온 후에 이 모듈 은 규칙 에 따라 같은 서버 에 있 는 다른 주 소 를 매 핑 합 니 다.새 주 소 는 처리 할 때 받 는 매개 변수 와 데 이 터 는 모두 새로운 주소 의 매개 변수 로 판단 합 니 다.예 를 들 어 customer.aspx?id=123,그리고 request 의 url 도 이전 주 소 를 다시 쓰 는 것 이 아니 라 새로운 주소 입 니 다.그러나 사용자 자체 가 변 화 를 느끼 지 못 합 니 다.브 라 우 저 에 오래된 URL 이 표시 되 어 있 기 때문에 주기 도 를 살 펴 보 겠 습 니 다.
//img.jbzj.com/file_images/article/201606/201606301640461.gif
URL Rewrite module 은 native 모듈 입 니 다.그림 에서 보 듯 이 그의 실행 주 기 는 Pre-begin Rquest 와 Begin Request 사이 입 니 다.이 모듈 은 요청 한 URL 에 따라 규칙 이 일치 한 후에 IIS pipeline 의 남 은 주기 에 들 어가 처리 할 수 있 도록 새로운 URL 을 처리 합 니 다.즉,요청 을 처리 하 는 HttpHandler 는 재 작성 후의 새로운 URL 에 따라 결 정 됩 니 다.
2. URL Routing
URL Routing 의 원 리 는 기 존의 URL 에 따라 규칙 을 정의 하고 각 규칙 에 대응 하 는 HttpHandler 를 정의 하 는 것 입 니 다.그 본질 과 URL 의 우호 여 부 는 관계 가 없습니다.통 일 된 규칙 에 따라 해당 하 는 HttpHandler 를 호출 할 뿐 해당 하 는 HttpHandler 를 찾 아 처리 한 후에 결 과 를 되 돌려 줍 니 다.찾 지 못 하면 폭 자원 오류 가 발생 합 니 다.
//img.jbzj.com/file_images/article/201606/201606301640462.gif
Routing 은 위탁 관리 코드 모듈 로 Resolve Cache 주기(Post Resolve RequestCache 이벤트)에 등록 한 후 MapHandler 주기 내 에 처리 합 니 다.PostResolveRequestCache 이벤트 에서 이 모듈 은 정적 집합 routing 표 의 모든 기록 에 설 명 된 URL 일치 규칙 을 조회 합 니 다.현재 URL 이 일치 하 는 Handler 에 대응 하면 이 Handler 처리 결 과 를 사용 하여 출력 합 니 다.
양자 간 의 차이
    URL Rewrite 는 request 처리 전에 해당 URL 을 수정 하 는 것 입 니 다.URL Rewrite 모듈 자체 가 이 요청 을 처리 하 는 HttpHandler 를 모 르 고 요청 을 처리 하 는 HttpHandler 도 자신 이 처리 한 URL 이 원래 URL 인지 재 작성 된 주소 인지 모 릅 니 다.
    URL Rewrite 와 는 반대로 URL Routing 은 규칙 에 따라 HttpHandler 를 지정 합 니 다.Routing 은 handler 의 고급 맵 이 라 고 볼 수 있 습 니 다.
    IIS URL Rewrite 는 asp.net,php,asp,정적 파일 등 모든 웹 프로그램의 맵 처리 에 사용 할 수 있 으 나 Routing 은.net 기반 웹 프로그램 만 처리 할 수 있 습 니 다.
    IIS URL Rewrite 는 IIS 통합 모드 와 고전 모드 에서 모두 사용 할 수 있 지만 기본 적 인 상황 에서 Routing 은 통합 모드 에서 만 사용 할 수 있 습 니 다.고전 모드 는 확장자 나 어댑터 를 사용 하여 IIS 에 프로그램 을 표시 해 야 합 니 다.(사실.net 에는 다른 구성 요소 인 aspnetfilter 가 있 습 니 다.)
    IIS URL Rewrite 는 도 메 인 이름,경로,Http Header,server 변수 등에 따라 재 작성 규칙 을 처리 할 수 있 지만 Routing 은 요청 한 URL 경로 와 HTTP-Method header 에 따라 만 처리 할 수 있 습 니 다.
    IIS URL Rewrite 는 HTTP 전환 을 처리 하고 사용자 정의 Status Code 와 Abort 요청 을 처리 할 수 있 지만 Routing 은 이 를 수행 할 수 없습니다.
    IIS URL Rewrite 의 확장 은 규칙 을 정의 하 는 저장 소 에서 만 확장 할 수 있 지만 Routing 의 확장 은 상대 적 으로 매우 강력 합 니 다.MVC 는 그 중의 하나 입 니 다.
총결산
둘 사이 에 이렇게 많은 차이 가 있 는데,우 리 는 도대체 어떤 것 을 써 야 합 니까?
프로그램 이 asp.net 이외 의 플랫폼 으로 구축 되 었 다 면 IIS URL Rewrite 만 사용 할 수 있 습 니 다.그렇지 않 으 면 우리 가 제안 하 는 규칙 은:
    asp.net 으로 새로운 asp.net 웹 프로그램 을 구축 하고 있다 면 Routing 을 사용 하 십시오.현재 Routing 은 MVC 뿐만 아니 라 웹 form 도 지원 하기 때 문 입 니 다.
    만약 당신 의 asp.net 웹 form 프로그램 이 이미 만들어 진 것 이 고 수정 하고 싶 지 않다 면 URL Rewrite 를 사용 하면 검색엔진 의 최 적 화 를 개선 할 수 있 습 니 다.
물론 두 가 지 를 결합 해서 사용 할 수도 있 지만 사용 하기 전에 위의 그림 에서 설명 한 내용 을 기억 해 야 한다.그들의 집행 주기 가 다르다.
참고 주소:http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/
이상 의 이 ASP.NET 에서 URL Routing 과 IIS 상의 URL Rewriting 의 차 이 는 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 었 으 면 좋 겠 습 니 다.여러분 들 도 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기