gpt4 book ai didi

c# - 由于 Web API 中的特殊字符,未设置发布值

转载 作者:行者123 更新时间:2023-11-30 14:14:29 25 4
gpt4 key购买 nike

我正在尝试向我的网络 API 服务发帖。关键是在发送类似

的消息时
{ message: "it is done" }

工作正常。但是,当我在消息中使用像 çıöpş 这样的特殊字符时,它无法转换我的 json,因此 post 对象保持为空。我能做些什么?这要么是当前的文化问题,要么是其他原因。我尝试将我的 post 参数作为 HtmlEncoded 样式发送,并使用编码 HttpUtility 类,但它也不起作用。

public class Animal{

public string Message {get;set;}
}

网络接口(interface)方法

public void DoSomething(Animal a){

}

客户端

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);

最好的问候,

凯末尔

最佳答案

一种可能是使用 UploadDataAsync方法允许您在编码数据时指定 UTF-8,因为您使用的 UploadStringAsync 方法基本上使用 Encoding.Default 在将数据写入套接字时对数据进行编码.因此,如果您的系统配置为使用 UTF-8 以外的其他编码,您就会遇到麻烦,因为 UploadStringAsync 使用您的系统编码,而在您的内容类型 header 中您指定了 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();
}

关于c# - 由于 Web API 中的特殊字符,未设置发布值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12081382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com