c# - 解析值行 1,位置 1 时遇到意外字符

我正在构建 .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服务使用不同的连接字符串?

image - 在 vim 文件中插入 bash 脚本输出

php - 在 Laravel 中通过表格获得一行的最佳方法是什么?

reactjs - EsLint 错误解释 no-unused-vars 中的导入语句

node.js - cors 问题与 passport.js google oauth 策略