2013-07-22 66 views
0

當我使用HttpUtility.UrlEncode對URL進行編碼時,我最終得到服務器錯誤。編碼URL後HTTP 404錯誤

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()) %> 

結果的網址:

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

其中工程出精品。我做錯了什麼嗎?

+0

那麼,你是網址編碼你的網址。不要這樣做,它會作爲一個網址。 =) –

+0

我不明白你的意思。我需要對其進行編碼 – Sperick

+1

Url編碼用於傳遞url中的值,否則可能會將其視爲url的一部分。所以,ehr。不要這樣做。只編碼您需要編碼的url部分。 –

回答

1

您不應編碼整個URL,至少不要編碼第一個"?"符號。如果你編碼?那麼您的應用程序也會查找名稱爲&的擴展名「UpdateMember.aspx%3fgroupId%3d0032409901」的文件,該文件不存在。

也許,這是你應該做的。

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

我認爲這是部分正確的。你也應該保持名稱和值之間的=不變。 UrlEncode所有值而不是名稱(如果您的Url上有多個名稱/值對) – Richard

0

HttpUtility.UrlEncode() URL編碼字符串

這意味着,它避開了從字符串的所有特殊字符,這樣你可以將它作爲一個URL的一部分,沒有任何字符被解析爲URL修改。

將任意文本作爲URL的一部分插入時使用這種轉義函數。