2013-01-01 22 views
4

我從一個項目在溶液中發送請求到另一個:C#有特殊字符requst發送干擾串

WebRequest request = WebRequest.Create(UrlTemplate); 
request.Timeout = 500000; 
request.Method = WebRequestMethods.Http.Post; 
request.ContentType = ContentType; 
byte[] postData = System.Text.Encoding.ASCII.GetBytes(data); 
request.ContentLength = postData.Length; 
Stream newStream = request.GetRequestStream(); 
// Send the data. 
newStream.Write(postData, 0, postData.Length); 
newStream.Flush(); 
newStream.Close(); 

那麼,在被UrlTemplate設置我得到正確的字符串的函數,(我發送數據),但問題在字符串包含特殊字符時開始。

如果字符串:12&34

我得到的功能是:12

如果字符串:12+34

我得到的功能:12 34

我很高興知道它是否發生在你們中的一些人身上,以及你們是如何解決它的。預先感謝。

+1

請參閱http://www.werockyourweb.com/url-escape-characters – Rotem

+0

@ParPar你認爲標記爲答案? –

回答

1

使用System.Web.HttpUtility.UrlEncodeSystem.Net.WebUtility.UrlEncode這個問題,是因爲該字符串是url-form Encoded造成的。 (如果這只是一個GET,我會說它是URL編碼的,但是您使用的是POST。)&符號在URL中有特殊含義,而+符號用作空格替換。

查看http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3.3的規格。如果您想獲得預期結果,則需要使用UrlEncode()手動對這些代碼進行編碼。

+0

對不起,我剛纔看到它。好吧,現在我明白了爲什麼會發生這種情況,但UrlEncoder在函數中讓我爲空...還有一件事 - 我需要這種發送形式,因爲它被項目中的其他函數使用。沒有辦法強制特定的字符串保持那樣嗎? – ParPar

+0

謝謝,我只是誤解了你給出的'UrlEncode'......現在我正在使用'HttpUtility.UrlEncode',這完全解決了這個問題。再次感謝您的詳細解答。 – ParPar

7

而形成UrlTemplate

+0

謝謝!對不起,我不能標記2作爲答案... – ParPar

1

在您的密碼中使用URI.EscapeDataString()方法。它會幫助你正確讀取你的特殊字符。