gpt4 book ai didi

c# - “The JSON value could not be converted to System.String” 尝试调用 Controller 端点时

转载 作者:行者123 更新时间:2023-12-03 13:45:40 25 4
gpt4 key购买 nike

我一直在尝试创建一个简单的 API,
我设法使Get工作得很好,但每当我尝试使用 PostPut我无法让它工作。
我正在尝试发布/放置 JSON 并将其作为字符串获取到我的 Controller 中。
我正在使用 Postman 和 Insomnia 进行测试(因为我在本地运行,所以我准确地打开了 SSL 验证)。
这是我的 Controller :

[Route("backoffice/[controller]")]
[ApiController]
public class AddQuestionController : ControllerBase
{
private IQuestionRepository _questionRepository;

public AddQuestionController(IQuestionRepository questionRepository)
{
_questionRepository = questionRepository ?? throw new ArgumentNullException(nameof(questionRepository));

}

[ProducesResponseType((int)System.Net.HttpStatusCode.OK)]
[HttpPost]
public async Task<ActionResult> AddQuestion([FromBody] string question)
{
Question q = JsonConvert.DeserializeObject<Question>(question);
await Task.Run(() => _questionRepository.InsertOne(q));
return Ok();
}
}

postman
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|a0b79872-4e41e975d19e251e.",
"errors": {
"$": [
"The JSON value could not be converted to System.String. Path: $ | LineNumber: 0 | BytePositionInLine: 1."
]
}
}

所以我认为这是因为 Json postman 的格式。但后来我尝试了 text格式
这发生了:
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.13",
"title": "Unsupported Media Type",
"status": 415,
"traceId": "|a0b79873-4e41e975d19e251e."
}

每次它甚至没有到达我的 Controller 的第一行。
有人可以告诉我我在这里做错了什么吗?是我的 Controller 吗?这是我使用 Postman 的方式吗?

最佳答案

模型绑定(bind)器无法将发送的数据映射/绑定(bind)到 Controller 参数

您的操作需要来自请求正文的简单字符串

public async Task<ActionResult> AddQuestion([FromBody] string question)

但是你发送了一个复杂的对象
{ "test" : "test" }

如果属性名称匹配,您可能会得到匹配

例如
{ "question" : "test" }

因为模型绑定(bind)器在匹配参数时会考虑属性名称。

如果要接收原始字符串,则需要发送有效的原始 JSON 字符串
"{ \"test\": \"test \"}"

那是正确的逃脱。

另一种选择是使用复杂对象作为参数
class Question  {
public string test { get; set; }
//...other properties
}

符合预期数据
public async Task<ActionResult> AddQuestion([FromBody] Question question) {
string value = question.test;

//...
}

模型绑定(bind)器将绑定(bind)数据并将其传递给操作参数。

引用 Model Binding in ASP.NET Core

关于c# - “The JSON value could not be converted to System.String” 尝试调用 Controller 端点时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60904904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com