代码之家  ›  专栏  ›  技术社区  ›  jessegavin

调用httpContext.rewritePath()后如何获取原始URL

  •  14
  • jessegavin  · 技术社区  · 14 年前

    我正在开发一个使用第三方httpmodule执行URL重写的web应用程序。

    我想知道以后是否有办法确定原始URL Application_BeginRequest 事件。例如。。。

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

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

    在过去,我曾编写过将原始URL存储在httpcontext.items中的httpmodules,但这是第三方应用程序,我无法做到这一点。

    任何想法都会受到赞赏。

    4 回复  |  直到 11 年前
        1
  •  1
  •   Josh Stodola    14 年前

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

    在您的情况下,重写适当的函数(processRequest?)并将原始URL存储在httpContext.items中,然后调用 MyBase 实施。应该工作得很好。

        2
  •  27
  •   Colin Breame    13 年前

    试试这个:

    string originalUrl = HttpContext.Current.Request.RawUrl;
    

    原始URL在此属性内。

        3
  •  9
  •   ThisGuy    13 年前

    我也有同样的问题,但是我想要完全限定的URL(rawurl只提供了路径和查询部分)。所以,根据乔希的回答:

    string originalUrlFull = 
       Page.Request.Url.GetLeftPart(System.UriPartial.Authority) + 
       Page.Request.RawUrl
    
        4
  •  6
  •   crash    11 年前

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

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

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