【问题标题】:How to get original url after HttpContext.RewritePath() has been called调用 HttpContext.RewritePath() 后如何获取原始 url
【发布时间】:2013-06-05 02:22:27
【问题描述】:

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

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

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

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

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

任何想法都将不胜感激。

【问题讨论】:

    标签: asp.net url-rewriting httpmodule


    【解决方案1】:

    试试这个:

    string originalUrl = HttpContext.Current.Request.RawUrl;
    

    原始 URL 在此属性内。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,但我想要完全限定的 URL(RawUrl 只为您提供路径和查询部分)。因此,以 Josh 的回答为基础:

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

          创建一个新的 HttpModule 来充当(继承)第三方模块的包装器,并用它做任何你想做的事情。

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

          【讨论】:

          • 你为什么要忍受这些麻烦......?只需使用请求的 RawUrl 属性。比所有这些模块的麻烦要简单得多。模块也有它的开销...
          • @Yuki,如果原始 URL 有不同的域怎么办???
          猜你喜欢
          • 2012-02-14
          • 2019-03-06
          • 1970-01-01
          • 1970-01-01
          • 2018-02-09
          • 1970-01-01
          • 1970-01-01
          • 2010-10-21
          • 2015-03-23
          相关资源
          最近更新 更多