1 つの可能性はUploadDataAsyncメソッドを使用することです。これにより、データをエンコードするときに UTF-8 を指定できます。使用しているUploadStringAsync
メソッドは基本的Encoding.Default
に、データをソケットに書き込むときにデータをエンコードするために使用されるためです。そのため、システムが UTF-8 以外のエンコーディングを使用するように構成されている場合、競合する可能性のあるUploadStringAsync
コンテンツ タイプ ヘッダーで指定したシステム エンコーディングを使用するため、問題が発生します。charset=utf-8
メソッドを使用UploadDataAsync
すると、意図をより明確にすることができます。
Animal a = new Animal();
a.Message = "öçşistltl";
string postDataString = JsonConvert.SerializeObject(a);
string URL = "http://localhost/Values/DoSomething";
string postDataString = JsonConvert.SerializeObject(a);
using (WebClient client = new WebClient())
{
client.UploadDataCompleted += client_UploadDataCompleted;
client.Headers["Content-Type"] = "application/json; charset=utf-8";
client.UploadDataAsync(new Uri(URI), "POST", Encoding.UTF8.GetBytes(postDataString));
}
別の可能性は、クライアントのエンコーディングを指定して使用することUploadStringAsync
です:
Animal a = new Animal();
a.Message = "öçşistltl";
string postDataString = JsonConvert.SerializeObject(a);
string URL = "http://localhost/Values/DoSomething";
string postDataString = JsonConvert.SerializeObject(a);
using (WebClient client = new WebClient())
{
client.Encoding = Encoding.UTF8;
client.UploadStringCompleted += client_UploadStringCompleted;
client.Headers["Content-Type"] = "application/json; charset=utf-8";
client.UploadStringAsync(new Uri(URI), "POST", postDataString);
}
または、Microsoft.AspNet.WebApi.Client
NuGet パッケージをクライアントにインストールすると、新しいHttpClient
クラス (ブロックの新しい子) を直接使用して、代わりに WebAPI を使用できますWebClient
。
Animal a = new Animal();
a.Message = "öçşistltl";
var URI = "http://localhost/Values/DoSomething";
using (var client = new HttpClient())
{
client
.PostAsync<Animal>(URI, a, new JsonMediaTypeFormatter())
.ContinueWith(x => x.Result.Content.ReadAsStringAsync().ContinueWith(y =>
{
Console.WriteLine(y.Result);
}))
.Wait();
}