2010-03-11 46 views
12

我正在使用第三方HttpModule执行URL重写的Web应用程序。HttpContext.RewritePath()被调用后如何获得原始URL

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

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

重新编写URL(来自第三方的HttpModule):
http://domain.com/products.aspx?productId=123

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

任何想法,将不胜感激。

回答

1

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

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

+6

你为什么要带着这些麻烦......?只需使用Request的RawUrl属性即可。比所有这些模块问题简单得多。模块也有其开销... – Yuki 2013-08-21 12:18:32

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任何方法/属性中获得的部分。