【问题标题】:Handling an ampersand in a url处理 url 中的 & 符号
【发布时间】:2016-11-18 13:57:29
【问题描述】:

我在 .aspx 页面上有一个超链接

<asp:HyperLink ID="hlTest" runat="server" NavigateUrl="#">Test Link</asp:HyperLink>

在我的页面后面的代码上:

string link = "http://myDoman/myEmailAttachments/1436/" + HttpUtility.HtmlEncode("Picture of Jim&John.jpg");
hlTest.NavigateUrl = link;

这会生成一个如下所示的 url: http://myDomain/myEmailAttachments/1436/Picture%20of%20Jim&John.jpg

这会导致显示一条消息:检测到来自客户端 (&) 的潜在危险 Request.Path 值。

我尝试过使用 Server.Urlencode。这会产生一个看起来像 ...

http://myDomain/myEmailAttachments/1436/Picture+of+Jim%26John.jpg

这会导致显示相同的消息:检测到来自客户端 (&) 的潜在危险 Request.Path 值。

如果我有一个名为...的文件

Jim&John.jpg 的图片

...我怎样才能把它变成一个超链接,这样它才能真正去获取文件?感谢您的帮助。

【问题讨论】:

标签: c# asp.net


【解决方案1】:

那是因为您不想 HTML 编码 (HttpUtility.HtmlEncode),而是 URL 编码 (HttpUtility.UrlEncode)。然后%26 将被重写为&amp;amp;,这是 URL 的正确格式。这将防止 ASP.NET 将其视为潜在恶意。

string link = "http://myDoman/myEmailAttachments/1436/"
              + HttpUtility.UrlEncode("Picture of Jim&John.jpg")
              ;

【讨论】:

  • 感谢您的回复。我发现 HttpUtility.UrlEncode 正在将 & 符号转换为 %26 - 这导致“找不到文件”消息
  • 您托管网站的 IIS 服务器版本是什么?您能否检查一下 IIS 中是否安装了 URL 重写模块? URL 重写模块将编码的 URL 转换回正常的工作。如果丢失,您将收到 404 resource not found 错误。
猜你喜欢
  • 2014-01-04
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多