我正在构建 .Net Core 3.1 Web API。向 Web API 发送请求。我正在使用 System.Net.Http 库。我将 JSON 放入 POST 请求正文中。这是 Web API 端处理程序:
using Microsoft.AspNetCore.Mvc;
[ApiController]
public class MyController : ControllerBase
{
[HttpPost]
public int HandleRequest([FromBody] string jsonString)
{
return 1;
}
}
下面的代码将空的 ArrayList 发送到 Web API,但它总是返回“在解析值行 1,位置 1 时遇到意外字符。”。
var serializedData = new JavaScriptSerializer().Serialize(new ArrayList());
var content = new StringContent(serializedData, Encoding.UTF8, "application/json");
var response = client.PostAsync(url, content);
return response.Result.Content.ReadAsStringAsync();
我曾尝试使用 JsonConvert 并围绕对象进行序列化,但它总是返回相同的错误。但后来我发现,如果我进行两次序列化,它就会开始工作。所以下面的代码有效 - 发送请求没有任何错误并且 Web API 端的数据是正确的。
var serializer = new JavaScriptSerializer();
var serializedData = serializer.Serialize(serializer.Serialize(new ArrayList()));
var content = new StringContent(serializedData, Encoding.UTF8, "application/json");
var response = client.PostAsync(url, content);
return response.Result.Content.ReadAsStringAsync();
为什么我需要进行双重序列化才能使其正常工作?
最佳答案
首先,当您使用异步方法时,您应该添加 await 关键字:
var response = await client.PostAsync(url, content);
return await response.Result.Content.ReadAsStringAsync();
其次,您正在发送一个数组,那么为什么不尝试发送它并获取对象而不是字符串:
var updateData = new ArrayList();
var jsonObject = JsonConvert.SerializeObject(updateData);
var content = new StringContent(jsonObject, Encoding.UTF8, "application/json");
var res = await apiClient.PutAsync(url, content);
然后在 WebAPI 中:
[HttpPost]
public int HandleRequest([FromBody] ArrayList list)
{
return 1;
}
关于c# - 解析值行 1,位置 1 时遇到意外字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63280025/