2014-11-14 44 views
0

我遇到了一些麻煩,與我的.Net WPF應用程序(.Net 4.5)中的restful服務進行通信,特別是在發送「PUT」請求時與一些JSON數據。c#httpcontent「400 - 錯誤的請求」如果字符串中包含換行符

僅供參考:寧靜服務在Python Flask下運行。

我用下面的方法來發送請求到RESTful服務的方法:

HttpClient http = new HttpClient(); 
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", encodedCredentials); 
http.Timeout = TimeSpan.FromSeconds(1); 
// Add an Accept header for JSON format. 
http.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
HttpContent content = new StringContent(jDataString, Encoding.UTF8, "application/json"); 

當我提交往常一樣串,所有工作得很好。但是,只要字符串包含換行符,我就遇到了麻煩。

使用:

mytring.Replace("\r", "").Replace("\n", "") 

的作品,我的字符串,然後由RESTful服務接受。

不幸的是,這是不可接受的,因爲我希望能夠檢索換行符。

我因此試圖像的方法:

​​

,甚至有內部的字符,以確保我認識模式:

mytring.Replace("\n", "\\+n").Replace("\r", "\\+r") 

在這兩種情況下,我分析的字符串看起來不錯,但不被寧靜的服務所接受。

下面兩個例子 - 第一個版本被接受,而不是第二和第三...

"XML_FIELD": "<IDs><Id Type=\"System.Int32\" Value=\"7\" /></IDs>" 
"XML_FIELD": "<IDs>\r\n<Id Type=\"System.Int32\" Value=\"20\" />\r\n</IDs>" 
"XML_FIELD": "<IDs>\+r\+n<Id Type=\"System.Int32\" Value=\"20\" />\+r\+n</IDs>" 

在此先感謝您的幫助! 關心!

回答

0

好,我知道......

問題來自何處爲「\ r \ n」字符這是直接從我的數據庫來了...

不管怎麼說,改變執行是序列化

mySerializedString.Replace("\r\n", "\n") 
        .Replace("\n", "\\n") 
        .Replace("\r", "\\r") 
        .Replace("\'", "\\'") 
        .Replace("\"", "\\\"") 
        .Replace("\t", "\\t") 
        .Replace("\b", "\\b") 
        .Replace("\f", "\\f"); 

和反序列化辦逆:

myDeSerializedString.Replace("\\n", "\n") 
        .Replace("\\r", "\r") 
        .Replace("\\'", "\'") 
        .Replace("\\\"", "\"") 
        .Replace("\\t", "\t") 
        .Replace("\\b", "\b") 
        .Replace("\\f", "\f"); 

注意:在這個過程中,我們升oose「\ r \ n」字符(用「\ n」替換)。

相關問題