在ASP.NET Core 3.0中使用[FromBody]字符串内容会ApiController返回验证错误:
{"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title":"One or more validation errors occurred.",
"status":400,
"traceId":"|9dd96d96-4e64bafba4ba0245.",
"errors":{"$":["The JSON value could not be converted to System.String. Path: $ | LineNumber: 0 | BytePositionInLine: 1."]}}
Run Code Online (Sandbox Code Playgroud)
当客户端发布具有content-type的数据时: application/json
如何在.NET Core 3.0的api控制器中以字符串形式获取原始json数据?无需客户端更新其内容类型?
Ame*_*eya 28
如果您使用的是 asp.net core 3.0,那么它具有内置的 JSON 支持。我使用了以下内容,它无需设置自定义输入处理程序即可工作。
[HttpPost]
public async Task<IActionResult> Index([FromBody] JsonElement body)
{
string json = System.Text.Json.JsonSerializer.Serialize(body);
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
Not sure this help but I think they made some change in .net core 3.0 Newtonsoft.JSON package so you can try this
Install Microsoft.AspNetCore.Mvc.NewtonsoftJson package.
In your startup.cs add
services.AddControllers().AddNewtonsoftJson();
如果您将参数更改[FromBody] String value为[FromBody] YourType value它,则会自动为您反序列化。
从:
// POST api/<SelectiveCallRulesController>
[HttpPost]
public async Task Post([FromBody] String rule)
{
...
Run Code Online (Sandbox Code Playgroud)
到:
// POST api/<SelectiveCallRulesController>
[HttpPost]
public async Task Post([FromBody] SelectiveCallRule rule)
{
...
Run Code Online (Sandbox Code Playgroud)
它让我四处走动,直到我意识到有关反序列化的错误消息是正确的!
| 归档时间: |
|
| 查看次数: |
1010 次 |
| 最近记录: |