【问题标题】:VB.NET 2.0: Where does a URL in code come from?VB.NET 2.0:代码中的 URL 来自哪里?
【发布时间】:2016-02-02 13:45:21
【问题描述】:

我必须调试一个离开公司的人的旧 VB.NET 2.0 代码。我们有一个生产系统(我们称之为http://prod)和一个测试系统(http://test)。两者几乎相似,包括文档存储库。在生产中查看文档时,底部显示的所有超链接都可以(意味着它们会说类似http://prod/download.ashx?id={GUID})。

但在测试中它是相同的 (http://prod/download.ashx?id={GUID}),即使它应该是 http://test/download.ashx?id={GUID}。

经过几个小时的调试,我找到了相关的代码行:

html += "<td><a href='" + HttpContext.Current.Request.Url.AbsoluteUri.Replace(HttpContext.Current.Request.Url.PathAndQuery, "/") + "int/download.ashx?id=" + row.Item(0).ToString() + "' target='_blank' class='" + row.Item(3).ToString() + "'>" + row.Item(1).ToString() + "</a>" + privat + "</td><td>" + row.Item(2).ToString() + "</td>"

看着html,这表明了

"<table class='table_dataTable'><thead><tr><td>Name</td><td>Jahr</td></tr></thead><tbody><tr><td><a href='http://prod/int/download.ashx?id=4d280886-db88-4b25-98d8-cf95a685d4a4' target='_blank' class='doc'>Document for managers</a></td><td>2014</td>"

所以我想知道,这不正确地来自哪里?我可能已经找到了编码的相关部分,但我不确定,如果我在这方面是正确的,现在应该分别做什么?:

Public Class download : Implements IHttpHandler, IReadOnlySessionState
    Dim debug As String = ""
    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        Dim fehler As String = ""
        Try
            ' Get the file name from the query string
            Dim queryFile As String = context.Request.QueryString("id")
            debug += "id=" + queryFile + "<br>"

感谢任何帮助,因为 VB.NET 不是我的主要关注点。

【问题讨论】:

  • HttpContext.Current.Request.Url.AbsoluteUri.Replace(HttpContext.Current.Request.Url.PathAndQuery, "/") 会以什么形式出现?这将是对错误 URL 的初步想法,尽管也可能是 html 变量稍后在其上运行了一些替换,从而取出了测试 URL。
  • 它说的是'http://prod/int/。这有什么帮助?
  • 如果是这种情况,那么我想知道在该方法之前是什么导致了链接的配置问题。考虑一下这如何缩小代码中可以找到问题的位置,以了解这有什么帮助。
  • 如果我自己找到了代码的相关部分,我就不会在这里问这个问题 ;-)。
  • 现在的问题是什么可以更新 HttpContext 以在其中包含错误的 URL 信息,这是此过程的下一轮。可能有很多工作要解决问题的核心,而我在 VB.Net 方面的经验有限,我试图在这里提出想法和建议。请注意,这仍然是 cmets,而不是我给出的答案。

标签: asp.net .net vb.net httpcontext ihttphandler


【解决方案1】:

您可能已经检查过这一点,但有时明显会被忽略。

  1. 在浏览器窗口中验证 URL。确保在导航时它没有更改为 http://prod...。

  2. 确认您的 Web 应用程序没有使用框架。可以使用 prod URL 将相关页面加载到框架中。如果是这种情况,您的 web.config 可能有一个设置来说明从哪里加载此帧,或者它可能只是硬编码。

  3. 检查 IIS 或 web.config 中的 URL 重写规则

【讨论】:

    猜你喜欢
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多