如何在调用HttpContext.RewritePath()之后获取原始URL

时间:2010-03-11 18:22:59

标签: asp.net url-rewriting httpmodule

我正在开发一个网络应用程序,该应用程序使用执行URL重写的第三方HttpModule。

我想知道以后在Application_BeginRequest事件中是否有任何方法可以确定原始网址。例如......

原始网址:
http://domain.com/products/cool-hat.aspx

重写网址(来自第三方httpmodule):
http://domain.com/products.aspx?productId=123

在过去,我编写了HttpModules,它将原始url存储在HttpContext.Items中,但是,这是第三方应用程序,我无法做到这一点。

任何想法都会受到赞赏。

4 个答案:

答案 0 :(得分:27)

试试这个:

string originalUrl = HttpContext.Current.Request.RawUrl;

原始网址位于此媒体资源内。

答案 1 :(得分:9)

我遇到了同样的问题,但我想要完全限定的URL(RawUrl只提供了Path和Query部分)。所以,以Josh的答案为基础:

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

答案 2 :(得分:6)

我知道很久以前就问过这个问题了。但是,这就是我使用的:

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

获得URI后,您可以执行ToString()来获取字符串,或者调用任何方法/属性来获取部件。

答案 3 :(得分:1)

创建一个新的HttpModule,作为第三方模块的包装(继承),并随意做任何事情。

在您的情况下,覆盖相应的函数(ProcessRequest?)并将原始url存储在HttpContext.Items中,然后调用MyBase实现。应该工作正常。