【问题标题】:Finding previous page Url查找上一页网址
【发布时间】:2009-04-21 14:11:55
【问题描述】:

我正在尝试查找上一页的url。例如,如果用户使用Server.Redirect("B.aspx")从页面A导航到页面B,页面B可以显示引用它的url。

我尝试过使用

Response.Write(Page.PreviousPage.ToString());

Response.Write(Request.UrlReferrer.ToString());

Response.Write(Context.Request.UrlReferrer.ToString());

Response.Write(Request.ServerVariables["HTTP_REFERER"].ToString);

但一切都是徒劳的,它给了我null exception 错误

【问题讨论】:

  • 你为什么要这样做?也许有其他解决方案更容易解决您的问题
  • 就我而言,当 ASPX 页面从 CDN 加载静态内容时,我需要知道引用者。解决方案(在我的情况下,您的里程可能会有所不同)是从 HttpRequest.Params.Get("HTTP_REFERER") 中提取值。
  • Last ToString 缺少参数。此特定实例也不需要 ToString()。

标签: asp.net


【解决方案1】:

您可以将当前页面保存在 Session 中,然后从那里检索它:

string previousPage = Session["PreviousPage"] as string;
Session["PreviousPage"] = System.IO.Path.GetFileName(System.Web.HttpContext.Current.Request.FilePath);

这样,previousPage 字符串将始终包含上一页的文件名,而 Session 变量将包含当前页,准备在下一页使用。

这样您还可以检测引荐来源网址是否为外部链接,因为这样 previousPage 字符串将为空。

【讨论】:

  • 如果用户使用两个窗口会出现问题,因此会话将被覆盖。如果这不是问题,这是一个很好的解决方案。
【解决方案2】:

如果仅适用于这种情况(您以编程方式重定向到 B.aspx),那么为什么不在查询字符串上放置一些内容来说明重定向的来源。这更有可能适用于多种浏览器类型和设备。

这种方法的一个优点是,您将能够区分重定向到 B.aspx 和直接链接(通过您的一个页面上的链接,或通过用户将 URL 输入到地址基)到页面B.aspx。

referrer 是客户端作为 HTTP 请求的一部分提供的内容。因此,您不能依赖它。

顺便说一下,这个问题是相关的: Request.UrlReferrer null?

更新 鉴于您的 cmets,除了“编辑所有文件”之外,尚不清楚这是一个简单的解决方案。我怀疑全局搜索/替换可能是您最好的选择。

更多背景知识:如果您使用 Fiddler(或任何其他 http 调试工具),您应该能够看到在执行重定向时未填充 Referrer 标头。例如,这是重定向的结果(即导致 IE 重定向到另一个页面的 HTTP 302 响应):

GET /webapplication1/WebForm3.aspx HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: en-GB
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; MS-RTC LM 8; Zune 3.0)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: (removed)

这是通过单击 StackOverflow.com 上的“问题”链接生成的 HTTP 请求:

GET /questions HTTP/1.1
    Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
    Referer: https://stackoverflow.com/questions/772780/finding-previous-page-url
    Accept-Language: en-GB
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; MS-RTC LM 8; Zune 3.0)
    Accept-Encoding: gzip, deflate
    Host: stackoverflow.com
    Connection: Keep-Alive

您可以看到,后者由页面上的链接生成,生成Referer 标头。

【讨论】:

  • 我很抱歉,但我找不到这个线程感谢您的回答,但我认为我将不得不编辑 50,000 页所以我试图找到将其放在我的自定义错误页面上的逻辑所以我可以知道哪个页面的网址损坏了
  • 在这种情况下,我认为您可能需要在该页面上进行防御性编码,并意识到您不会总是获得此信息。对不起。
【解决方案3】:

您也可以使用Server.Tansfer("B.aspx") 代替Response.Redirect("B.aspx")

编辑:Searock,如果您不想更改现有代码,Request.ServerVariables["HTTP_REFERER"].ToString() 在这种情况下应该可以正常工作。

【讨论】:

    【解决方案4】:

    请注意 HTTP_REFERER 不可靠。您不能依赖它,因为有很多客户端由于各种原因(偏执设置、安全软件等)没有发送。

    另外一些JS打开的新窗口可能没有REFERER SSL > NONE SSL 页面也不会有 REFERER,所以要小心依赖类似的东西。

    更好的主意是在 Querystring 中发送上一页。

    如果是 ASPX,您可能会以更聪明的方式来执行此操作,例如在写出缓冲区之前向所有表单或处理链接添加新的隐藏参数。

    【讨论】:

      【解决方案5】:

      您能否确认一下您在此处实际使用的方法(最好是通过编辑原始问题)?

      HttpServerUtility(即服务器。)没有“重定向”方法,它有传输和执行。

      HttpResponse(即响应。)会。

      HttpResponse.Redirect 将向客户端发送一个 302 响应,告诉它对 Location 字段的值发出一个新请求。然后我可以查询 Request.UrlReferrer 以查看执行重定向的页面的值。

      如果您使用HttpServerUtility.TransferHttpServerUtility.Execute,那么这些操作完全发生在 ASP.NET 中的服务器上,因此“引荐来源网址”很可能为空。客户端浏览器也会认为它仍在最初请求的页面上。

      另见How to detect if an aspx page was called from Server.Execute

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-13
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-05
        • 2019-11-15
        相关资源
        最近更新 更多