使用HTTPRequest在JSON中发送变音符
本文关键字:音符 HTTPRequest JSON 使用 | 更新日期: 2023-09-27 18:02:07
我正在尝试使用POST发送JSON字符串到运行在Azure上的web服务。该程序是用Xamarin Forms创建的应用程序。JSON通信与服务器基本上工作,但我有问题与变音符。
我有一个类"Test"
public class Test
{
public string ä { get; set; }
}
,我试图将其序列化为字符串。我使用JsonConvert:
string postData = JsonConvert.SerializeObject(test);
结果为{"ä":"ä"}。
当我发送这个字符串时,我得到一个400 Bad Request错误消息。
有趣的是,使用Firefox插件"打开HttpRequester"发送这个字符串是完美的。
将第一个变音符变为"ae" ({"ae":"ä"})。
下面是我用来发送字符串的c#代码:
private void Send()
{
Uri uri = new Uri(serverPath);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/json";
request.BeginGetRequestStream(new AsyncCallback(UploadWithRequestStream), request);
}
private void UploadWithRequestStream(IAsyncResult asynchronousResult)
{
Test test = new Test();
test.ä = "ä";
string postData = JsonConvert.SerializeObject(test); // {"ä":"ä"}
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
Stream uploadStream = request.EndGetRequestStream(asynchronousResult);
uploadStream.Write(byteArray, 0, postData.Length);
uploadStream.Flush();
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}
private void GetResponseCallback(IAsyncResult asynchronousResult)
{
// 404 Bad Request
}
嗯,这一行有问题:
uploadStream.Write(byteArray, 0, postData.Length);
从byteArray中上传字节并将其作为字符计数。但是单个字符(特别是变音符号)可以映射到两个字节。在您的示例中,byteArray。长度= 11,和postData。长度= 9。这就是为什么发送缩短版的postData而服务器无法处理它的原因。
用下面的字符串替换上面提到的字符串,一切正常:
uploadStream.Write(byteArray, 0, byteArray.Length);