从.NET发送HttpWebRequest到php站点时出错

Ola*_*laf 3 c# asp.net encoding utf-8

尽管尝试了很多东西(见下文),但我无法摆脱"要写入流的字节超过指定的内容长度字节大小".抛出的错误

writer.Close();
Run Code Online (Sandbox Code Playgroud)

这是尝试将数据从ASP.NET发布到php站点的代码.只要代码中没有特殊字符,脚本就可以正常工作 - 请注意'Wörld'中的德语变音符号.

Uri uri = new Uri("http://mydomain/test.php");
string data = @"data=Hello Wörld";

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Method = WebRequestMethods.Http.Post;
request.ContentLength = data.Length;
request.ContentType = "application/x-www-form-urlencoded";
StreamWriter writer = new StreamWriter(request.GetRequestStream()); 
writer.Write(data);
writer.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream()); 
string tmp = reader.ReadToEnd();
response.Close();
Response.Write(tmp);
Run Code Online (Sandbox Code Playgroud)

我尝试过使用UTF-8编码的不同变体,例如:

request.ContentLength = System.Text.Encoding.UTF8.GetByteCount(data);
Run Code Online (Sandbox Code Playgroud)

和/或

StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)

我也尝试在发送之前将数据转换为UTF-8(有点难看):

data = System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.UTF8, System.Text.Encoding.UTF8.GetBytes(data)));
Run Code Online (Sandbox Code Playgroud)

但错误仍然存​​在.我的感觉是我没有正确处理UTF-8.非常感谢任何帮助,也有任何提示,我可以找到一个从ASP.NET(服务器端)发布到PHP的完美工作脚本.

Yah*_*hia 7

使用

byte[] bdata = Encoding.UTF8.GetBytes(data);
Run Code Online (Sandbox Code Playgroud)

request.ContentLength = bdata.Length;
Run Code Online (Sandbox Code Playgroud)

Stream writer = request.GetRequestStream(); 
writer.Write(bdata, 0, bdata.Length);
writer.Close();
Run Code Online (Sandbox Code Playgroud)