无法在浏览器上打开包含尖锐(#)字符的.PDF文件。示例:Visual C#如何编程.pdf。
下载书籍代码:
<asp:FormView ID="FormView2" runat="server">
<ItemTemplate>
<asp:LoginView ID="LoginView1" runat="server">
<LoggedInTemplate>
<asp:HyperLink ID="HyperLink1" ToolTip="Download book" runat="server" NavigateUrl='<%# Eval("PDFUrl") %>' Text="Download" Target="_blank"></asp:HyperLink>
<br />
</LoggedInTemplate>
<AnonymousTemplate>
<asp:LoginStatus ID="LoginStatus1" LoginText="Login" runat="server" /> or <a href="../login/register.aspx">register</a> to download book.
</AnonymousTemplate>
</asp:LoginView>
</ItemTemplate>
</asp:FormView>
单击“下载”时,在新选项卡上显示:
HTTP错误404.0 - 未找到 您要查找的资源已被删除,名称已更改或暂时不可用。
答案 0 :(得分:3)
这是因为#
在网址中具有特殊含义。它标记了哈希的开头,通常用于在页面中定义锚点。
您可以使用%23
转义哈希值。
最简单的方法是拨打UrlEncode
:
HttpUtility.UrlEncode((string)Eval("PDFUrl"))
答案 1 :(得分:2)
#
是URL规范中的保留字符,因此我认为浏览器实际收到的URL并不包含:
Visual C# How to Program.pdf
但只包含:
Visual C
(因为哈希字符之后的任何内容都是用于客户端导航,所以我不认为它甚至被发送到服务器。)因此404错误。
您需要对您的值进行网址编码。自从我使用过WebForms以来已经有一段时间了,但可能会工作:
NavigateUrl='<%# HttpContext.Current.Server.UrlEncode(Eval("PDFUrl")) %>'
这是否直接在页面标记的绑定中起作用,重点仍然是您需要对URL进行URL编码。