【问题标题】:HTTP Error 404.0 Not Found - when opening files that contain "#" character未找到 HTTP 错误 404.0 - 打开包含“#”字符的文件时
【发布时间】:2014-09-13 19:38:53
【问题描述】:

无法在浏览器上打开包含锐利 (#) 字符的 .PDF 文件。示例:Visual C# How to Program.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 - 未找到 您要查找的资源已被删除、名称已更改或暂时不可用。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    那是因为# 在网址中具有特殊含义。它标志着哈希的开始,通常用于定义页面中的锚点到哪里去。

    您可以改用%23 转义哈希。

    最简单的方法是致电UrlEncode

    HttpUtility.UrlEncode((string)Eval("PDFUrl"))
    

    【讨论】:

    • 我是否需要删除 Eval 方法,因为它显示: System.Web.HttpUtility.UrlEndoce(byte[]) has some invalid arguments?谢谢。
    • 网址还是有问题:http://localhost:52747/books/~%2fPDF%2fVisual+C%23+2012+How+to+Program+(5th+Edition).pdf。同样的错误。
    • 该字段的内容是什么,URL应该是什么?
    • URL 应该指向 PDF 文件夹,如下所示:http://localhost:52747/PDF/jQuery%20in%20Action.pdf...并且它适用于其他文件。 HttpUtility.UrlEncode((string)Eval("PDFUrl")) 指向实际页面,而不是书籍所在的 PDF 文件夹:http://localhost:52747/books/~%2fPDF%2fjQuery+in+Action.pdf
    • 也许添加 Server.MapPath(HttpUtility...)
    【解决方案2】:

    # 是 URL 规范中的保留字符,所以我想浏览器实际接收到的 URL 不包含:

    Visual C# How to Program.pdf
    

    但只是包含:

    Visual C
    

    (由于哈希字符之后的任何内容都是用于客户端导航,我认为它甚至不会发送到服务器。)因此出现 404 错误。

    您需要对您的值进行 URL 编码。自从我使用 WebForms 已经有一段时间了,但是这个可能工作:

    NavigateUrl='<%# HttpContext.Current.Server.UrlEncode(Eval("PDFUrl")) %>'
    

    无论这是否直接在页面标记上的绑定中起作用,关键仍然是您需要对您的 URL 进行 URL 编码。

    【讨论】:

    • 谢谢,但它显示错误:'System.Web.HttpServerUtility.UrlEncode(string)' 的最佳重载方法匹配有一些无效参数。
    猜你喜欢
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2013-06-24
    • 2017-07-28
    • 2020-04-30
    • 1970-01-01
    相关资源
    最近更新 更多