【问题标题】:HTTP 404 Error after encoding Url编码 URL 后出现 HTTP 404 错误
【发布时间】:2013-07-22 14:51:11
【问题描述】:

当我使用 HttpUtility.UrlEncode 对 Url 进行编码时,我最终会收到服务器错误。

ASP.Net 代码:

NavigateUrl=<%# HttpUtility.UrlEncode(string.Concat("UpdateMember.aspx","?groupId=", DataBinder.Eval(Container.DataItem, "GroupID").ToString())) %> 

网址:

http://localhost/UITest/MM/UpdateMember.aspx%3fgroupId%3d0032409901

导致“HTTP 错误 404.0 - 未找到 您要查找的资源已被删除、名称已更改或暂时不可用。"

但是使用:

NavigateUrl=<%# string.Concat("UpdateMember.aspx","?groupId=", DataBinder.Eval(Container.DataItem, "GroupID").ToString()) %> 

在 URL 中的结果:

http://localhost/UITest/MM/UpdateMember.aspx?groupId=0032409901

效果很好。我做错了什么吗?

【问题讨论】:

  • 好吧,你正在对你的 url 进行 url 编码。不要那样做,它会作为一个 url 工作。 =)
  • 我不明白你的意思。由于其他原因我需要对其进行编码
  • Url-encoding 用于在 url 中传递值,否则可能会被视为 url 的一部分。所以,呃。不要那样做。只对需要编码的部分 url 进行编码。
  • 想要对 URL 进行 URL 编码是有正当理由的,但您给出的示例让人认为在这种情况下,您不需要...

标签: c# asp.net iis


【解决方案1】:

您不应该对整个 URL 进行编码,至少不是第一个 "?" 符号。如果你编码 ?那么您的应用程序也会查找名称和扩展名为“UpdateMember.aspx%3fgroupId%3d0032409901”但不存在的文件。

也许,这就是你应该做的。

http://localhost/UITest/MM/UpdateMember.aspx?groupId%3d0032409901

【讨论】:

  • 我认为这部分是正确的。您还应该保持名称和值之间的 = 不变。 UrlEncode 所有值而不是名称(如果您的 Url 上有多个名称/值对)
【解决方案2】:

HttpUtility.UrlEncode() URL-编码字符串

这意味着它会转义字符串中的所有特殊字符,以便您可以将其作为 URL 的一部分插入,而不会将任何字符解析为 URL 修饰符。

在将任意文本作为 URL 的一部分插入时,您会使用这种转义函数。

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2013-09-25
    • 1970-01-01
    相关资源
    最近更新 更多