2011-05-13 136 views
2

我需要調用的Web服務的URL包含一個包含自由格式文本的參數。我不確定爲什麼它是這樣設計的,因爲它是使用POST發送的,並且包含許多字段作爲POST的一部分。但是,這是我的問題。針對HttpWebRequest的網址被特殊字符截斷

對於某些字符,如英鎊符號和<>,URL在遇到問題字符時會被截斷。我是HTML編碼參數的文本,但問題依然存在。 我可以看到特殊字符,例如>正被編碼爲類似gt;的東西。我在想編碼字符串中的分號在某種程度上是個問題。

我把一個嗅探器接收傳入的請求在服務器,我看到那裏的URL已被截斷。

在服務器上我看到這樣的:的

...?extraData=kjfkfjslkj 

代替:

...?extraData=kjfkfjslkj#kfjkdlsfj 

的代碼是這樣的:哈希後

using System.Web; 
    .... 
    String strExtra="kjfkfjslkj#kfjkdlsfj"; 
    strURL = strStuff + "?extraData=" + System.Web.HttpUtility.HtmlEncode(strExtra); 
    HttpWebRequest oRequest = (HttpWebRequest)WebRequest.Create(new Uri(strURL)); 
    oRequest.Method = httpMethod; 
    oRequest.ContentType = "application/atom+xml"; 
    ... 
    using (WebResponse oResponse = oRequest.GetResponse()) 
    { 
    ... 
    } 

回答

7

一切(#)標誌不發送到服務器。瀏覽器和頁面上的腳本使用它來表示頁面上的位置或其他一些意義。刪除散列符號或URL編碼它(%23)將其發送到服務器。

這條線:在URL使用數據時

strURL = strStuff + "?extraData=" + System.Web.HttpUtility.HtmlEncode(strExtra); 

應該是

strURL = strStuff + "?extraData=" + Server.UrlEncode(strExtra); 

編碼爲HTML是無用的。

+1

是的。這對我有效。唯一不同的是我使用System.Web.HttpUtility.UrlEncode() – George 2011-05-13 01:11:42

+0

'Page.Server'屬性的類型爲'HttpServerUtility',而'UrlEncode' /'UrlDecode'方法實際上將該調用傳遞給'HttpUtility。 UrlEncode' /'HttpUtility.UrlDecode',所以你很好。 – 2011-05-13 01:36:10

+1

System.Web.HttpUtility.UrlEncode不會擺脫散列符號... – Ted 2012-10-11 18:42:04