Asp.net 调用HttpContext.RewritePath()后如何获取原始url

Asp.net 调用HttpContext.RewritePath()后如何获取原始url,asp.net,url-rewriting,httpmodule,Asp.net,Url Rewriting,Httpmodule,我正在开发一个web应用程序,它使用第三方HttpModule执行url重写 我想知道以后在Application\u BeginRequest事件中是否有办法确定原始url。例如 原始url: http://domain.com/products/cool-hat.aspx 重新写入的url(来自第三方httpmodule): http://domain.com/products.aspx?productId=123 在过去,我编写了HttpModules,在HttpContext.Items

我正在开发一个web应用程序,它使用第三方HttpModule执行url重写

我想知道以后在
Application\u BeginRequest
事件中是否有办法确定原始url。例如

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

重新写入的url(来自第三方httpmodule):
http://domain.com/products.aspx?productId=123

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


如果您有任何想法,我们将不胜感激。

创建一个新的HttpModule,作为第三方模块的包装(继承)并使用它做任何您想做的事情

在您的情况下,重写适当的函数(ProcessRequest?)并将原始url存储在HttpContext.Items中,然后调用
MyBase
实现。应该可以。试试这个:

string originalUrl = HttpContext.Current.Request.RawUrl;

原始URL位于该属性内。

我也有同样的问题,但我想要完全限定的URL(RawUrl只提供路径和查询部分)。因此,根据Josh的回答:

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

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

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

一旦您有了URI,您就可以执行ToString()来获取字符串,或者调用任何方法/属性来获取部分。

为什么要这么麻烦?只需使用请求的RawUrl属性。比所有这些模块故障简单得多。模块也有它的开销。。。