我有一个传递给webapi的json字符串,现在的问题是,当我尝试添加特殊字符时,接收对象变为null。
这是我做的。
string json = JsonConvert.SerializeObject(ojectParams);
WebClient client = new WebClient();
client.Headers.Add("content-type", "application/json; charset=utf-8");
client.Headers.Add("AppKey", WebUser.AppKey);
client.Headers.Add("AppSecret", WebUser.AppSecret);
client.Headers.Add("AccountId", WebUser.AccountId.ToString());
if (!string.IsNullOrEmpty(WebUser.StoreId))
{
client.Headers.Add("StoreId", WebUser.StoreId);
}
var returnedStringObject = client.UploadString(string.Format("{0}/{1}", ConfigurationManager.AppSettings["Api"], endpoint), method, json);
这是json字符串:
"{\"Firstname\":\"kyv®\",\"Lastname\":\"sab®\"}"
我在标题中添加了这个,希望它能解决问题。但是没有运气。
charset=utf-8
在接收端点上,obj变为null。但是当我删除特殊字符时,值正在传递。
[HttpPost]
public responseObj Endpoint(requestObj request)
有什么想法吗?谢谢!
答案 0 :(得分:3)
您需要设置WebClient的编码
client.Encoding = Encoding.UTF8;
答案 1 :(得分:1)
请参阅下面的代码。 注意:我没有使用JsonConvert.SerializeObject并使用HttpClient而不是WebClient
public static HttpRequestMessage CreateRequest(string requestUrl, HttpMethod method, String obj)
{
var request = new HttpRequestMessage
{
RequestUri = new Uri(requestUrl),
Method = method,
Content = new StringContent(obj, Encoding.UTF8, "application/json")
};
return request;
}
public static void DoAPI()
{
var client = new HttpClient();
var obj = "{\"Firstname\":\"kyv®\",\"Lastname\":\"sab®\"}";
var httpRequest = CreateRequest("mywebapiURL", HttpMethod.Post, obj);
var response = client.SendAsync(httpRequest).Result;
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
}