2010-03-11 2 views
12

URL 재 작성을 수행하는 타사 HttpModule을 사용하는 웹 응용 프로그램에서 작업 중입니다.HttpContext.RewritePath()가 호출 된 후 원래 URL을 얻는 방법

나중에 Application_BeginRequest 이벤트에서 원래 URL을 확인할 방법이 있는지 알고 싶습니다. 예를 들어 ...

원래 URL :
http://domain.com/products/cool-hat.aspx

재 작성 URL (제 3 자 HttpModule을에서) : 나는 원래 URL에 저장 HttpModules는 작성했습니다 과거
http://domain.com/products.aspx?productId=123

HttpContext.Items하지만이 앱은 타사 앱이며이를 수행 할 방법이 없습니다.

모든 아이디어를 얻을 수 있습니다.

답변

1

새 HttpModule을 작성하여 타사 모듈 주위에 래퍼 (상속)로 사용하고 원하는대로 수행하십시오.

적절한 경우 (ProcessRequest?) 재정의하고 HttpContext.Items에 원본 URL을 저장 한 다음 MyBase 구현을 호출하십시오. 잘 작동해야합니다.

+6

왜이 모든 문제를 해결할 수 있습니까? 요청의 RawUrl 속성을 사용하기 만하면됩니다. 이 모든 모듈 문제보다 훨씬 간단합니다. 모듈에는 또한 오버 헤드가 있습니다 ... – Yuki

27

이 시도 :

string originalUrl = HttpContext.Current.Request.RawUrl; 

원래 URL이 속성의 내부입니다.

8

나는 동일한 문제가 있었지만 정규 URL (RawUrl은 경로 및 쿼리 부분 만 제공)을 원했습니다. 그래서 조쉬의 대답을 토대로 :

string originalUrlFull = 
    Page.Request.Url.GetLeftPart(System.UriPartial.Authority) + 
    Page.Request.RawUrl 
5

나는이 질문이 오래 전에 물었다는 것을 알고있다. 그러나, 이것은 내가 무엇을 사용 :

System.Uri originalUri = new System.Uri(Page.Request.Url, Page.Request.RawUrl) 

당신이 URI 당신이 ToString() 문자열을 얻거나 부품을 얻을 수있는 방법/모든 속성을있는 CAL을 할 수있는이 있으면.