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

标签 c# asp.net-core asp.net-core-webapi

我正在构建 .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/

相关文章:

c# - 同时有多个请求时的意外连接状态

c# - 如何从 body 接受 API Controller 方法中的 List<string> 作为 json?

asp.net-core-webapi - 删除 ProducesResponseType 属性 webapi aspnetcore 2.1

logging - 从静态类记录 ASP.NET Core Web API

asp.net - UserManager CheckPassword() 在.net core 3.1 中重新哈希密码,无法从 asp.net MVC 项目登录

c# - 何时使用包含引用类型的值类型数组而不是引用类型数组?

c# - 我是否必须处理不使用的退回对象?

C# 后台线程完成后执行方法

c# - Azure 代理,请求 IIS 托管 API 时出现 CORS 错误

inheritance - 继承类是否应该在基类的同一个cs文件中?