kko*_*yik 3 c# asp.net-mvc asp.net-mvc-4 asp.net-web-api
我正在尝试为我的网络API服务发帖.重点是发送消息时
{ message: "it is done" }
Run Code Online (Sandbox Code Playgroud)
工作正常.但是当我在我的消息中使用像çıöpş这样的特殊字符时,它无法转换我的json以使post对象保持为null.我能做什么?这既是当前的文化问题,也可能是其他问题.我试图将我的post参数发送为带有编码HttpUtility类的HtmlEncoded样式,但它也不起作用.
public class Animal{
public string Message {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
Web API方法
public void DoSomething(Animal a){
}
Run Code Online (Sandbox Code Playgroud)
客户
Animal a = new Animal();
a.Message = "öç?istltl";
string postDataString = JsonConvert.SerializeObject(a);
string URL = "http://localhost/Values/DoSomething";
WebClient client = new WebClient();
client.UploadStringCompleted += client_UploadStringCompleted;
client.Headers["Content-Type"] = "application/json;charset=utf-8";
client.UploadStringAsync(new Uri(URL), "POST",postDataString);
Run Code Online (Sandbox Code Playgroud)
最好的祝福,
凯末尔
一种可能性是使用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));
}
Run Code Online (Sandbox Code Playgroud)
另一种可能性是指定客户端的编码并使用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);
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您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();
}
Run Code Online (Sandbox Code Playgroud)