c#HttpWebRequest後'ingな
-
11-09-2019 - |
質問
いようにしているため、ウェブサーバ.
System.Net.HttpWebRequest EventReq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("url");
System.String Content = "id=" + Id;
EventReq.ContentLength = System.Text.Encoding.UTF8.GetByteCount(Content);
EventReq.Method = "POST";
EventReq.ContentType = "application/x-www-form-urlencoded";
System.IO.StreamWriter sw = new System.IO.StreamWriter(EventReq.GetRequestStream(), System.Text.Encoding.UTF8);
sw.Write(Content);
sw.Flush();
sw.Close();
見、有名なボスキラー武器でも設定内容-全長は符号化されたデータ...とにかく失敗した時sw.flush()を"バイトストリームに書き込まれるのContent-Lengthで指定されたサイズ"
はStreamWriterているマジックの背後に私の背中を思いのでは?ができる相手かStreamWriterはしてるのでしょうか?
解決
その他の答えていることを説明してこれを避けるためには、もうと思ってなぜそれは:いまた、 バイト順マーク 前の実際の内容です。
させないように指定できますことを呼び出し new UTF8Encoding(false)
の代わりに Encoding.UTF8
.こちらは短期プログラムの実施を発揮する差
using System;
using System.Text;
using System.IO;
class Test
{
static void Main()
{
Encoding enc = new UTF8Encoding(false); // Prints 1 1
// Encoding enc = Encoding.UTF8; // Prints 1 4
string content = "x";
Console.WriteLine(enc.GetByteCount("x"));
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms, enc);
sw.Write(content);
sw.Flush();
Console.WriteLine(ms.Length);
}
}
他のヒント
たぶん、より簡単のように行います。
using(WebClient client = new WebClient()) {
NameValueCollection values = new NameValueCollection();
values.Add("id",Id);
byte[] resp = client.UploadValues("url","POST", values);
}
またはここを見ます以下のような使用を許可するための議論ます:
client.Post(destUri, new {
id = Id // other values here
});
あなたはそれはあなたがそれを閉じると、ストリームを要求するために書き込まれたデータのサイズに自動的に設定されるので、明示的ん。ContentLengthを設定する必要はありません。
所属していません StackOverflow