我有一个发布到WebAPI的MVC项目。使用重音字符(é)时,WebAPI [FromBody]的对象为空。当没有重音字符时,它会正确填充。 MVC对象无论哪种方式都是正确的,所以我不知道为什么从JSON到我的API对象会出现转换问题。 JSON由Newtonsoft.Json.JsonConvert.SerializeObject版本6.0.1生成。
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", _authorizationString);
string json = Newtonsoft.Json.JsonConvert.SerializeObject(model);
var response = await client.PostAsync(_url, new StringContent(json, System.Text.Encoding.Default, "application/json"));
string content = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
model = JsonConvert.DeserializeObject<Model>(content);
TempData["Model"] = model;
return RedirectToAction("Confirmation");
}
}
//API
[HttpPost]
public HttpResponseMessage ApiMethod([FromBody] ApiObject obj)
{
//obj is null here, but only when there is an accent in one of the obj string properties.
...
}
我刚发现了一件事。我可以成功地使用Fiddler发布到API。我从这一行复制了JSON,字符串json = Newtonsoft.Json.JsonConvert.SerializeObject(model);
也许PostAsync有错误?
答案 0 :(得分:0)
我在PostAsync中切换了编码。 Unicode和ASCII都有效。 UTF32没有。