我正在开发一个网络应用程序,该应用程序使用执行URL重写的第三方HttpModule。
我想知道以后在Application_BeginRequest
事件中是否有任何方法可以确定原始网址。例如......
原始网址:
http://domain.com/products/cool-hat.aspx
重写网址(来自第三方httpmodule):
http://domain.com/products.aspx?productId=123
在过去,我编写了HttpModules,它将原始url存储在HttpContext.Items中,但是,这是第三方应用程序,我无法做到这一点。
任何想法都会受到赞赏。
答案 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
实现。应该工作正常。