2014-09-13 47 views
0

無法在瀏覽器中打開包含尖銳(#)字符的PDF文件。例如:Visual C#How to Program.pdf。未找到HTTP錯誤404.0 - 打開包含「#」字符的文件時

代碼下載書:

<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 - 找不到 你正在尋找的資源已被移除,其名稱已更改,或暫時不可用。

回答

3

這是因爲#在url中有特殊含義。它標記了散列的開始,通常用於在頁面中定義錨點的位置。

您可以使用%23代替散列散列。

做到這一點的最簡單的方法是調用UrlEncode

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

我是否需要刪除'Eval'方法,因爲它顯示:System.Web.HttpUtility.UrlEndo(byte [])有一些無效參數?謝謝。 – user2969489 2014-09-13 20:00:24

+0

嘗試更新的代碼。 – 2014-09-13 20:19:35

+0

網址仍存在問題:'http:// localhost:52747/books /〜%2fPDF%2fVisual + C%23 + 2012 + How + to + Program +(5th + Edition).pdf'。同樣的錯誤。 – user2969489 2014-09-13 20:38:58

2

#是在URL規範的保留字符,所以我想實際上是由於瀏覽器接收URL不包含:

Visual C# How to Program.pdf 

而是隻包含:

Visual C 

(因爲哈希字符之後的任何內容都是用於客戶端導航的,所以我認爲它甚至不會發送到服務器。)因此,404錯誤。

您需要對您的值進行網址編碼。它已經有一段時間,因爲我使用的WebForms,但是這威力工作:

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

不論這個工作直接在頁面標記的結合點仍然是你需要URL編碼的網址。

+0

謝謝,但它顯示錯誤:'System.Web.HttpServerUtility.UrlEncode(string)'的最佳重載方法匹配有一些無效的參數。 – user2969489 2014-09-13 20:20:50

相關問題