c#httpcontent" 400 - 错误请求"如果string包含换行符

时间:2014-11-14 10:07:53

标签: json wpf string rest special-characters

我在使用来自我的.Net WPF应用程序(.Net 4.5)的安静服务时遇到了一些麻烦,特别是在发送带有一些json数据的“PUT”请求时。

仅供参考:宁静的服务在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", "") 

工作,我的字符串然后被宁静的服务接受。

不幸的是,这是不可接受的,因为我希望能够检索换行符。

我因此尝试了类似的方法:

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

或者甚至使用内部字符以确保我识别出模式:

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>"

预先感谢您的帮助!! 此致!

1 个答案:

答案 0 :(得分:0)

好的,明白了......

问题来自“\ r \ n”字符,它直接来自我的数据库......

无论如何,改为执行是针对SERIALIZATION的

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");

注意:在此过程中,我们会松开“\ r \ n”个字符(由“\ n”替换)。