我正在构建 .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;
}
https://stackoverflow.com/questions/63280025/
相关文章:
perl - 为什么 local 在 STDERR 和 STDOUT 上不起作用?
python - Pandas 在 Linux 中失败,在 Windows 中没有发生 - 缺少数据
caching - Mike Acton 的面向数据设计 - 'loops per cache li
text - 关注 VStack 中的下一个 TextField
angular - 如何更新 Angular 中提供者提供的值?
azure - 如何在函数应用中为Azure SignalR服务使用不同的连接字符串?
php - 在 Laravel 中通过表格获得一行的最佳方法是什么?