Dotnet Core 3.1 Kestrel Web API BadRequest,System.NotSupportedException

问题描述 投票:0回答:1

在我的服务器上,我有这样的功能

[HttpPost()]
public void Hello([FromBody]int Version)
{
}

如果省略[FromBody] int版本参数,则能够调用上述API

var c = new HttpClient();
var Json = new StringContent(JsonConvert.SerializeObject(new { Version = 123}), Encoding.UTF8, "application/json")
var Resp = Api.PostAsync("http://MyURL", Json).Result;

如果包含[FromBody] int版本。我收到以下错误:

Request.Body
{Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpRequestStream}
    CanRead: true
    CanSeek: false
    CanTimeout: false
    CanWrite: false
    Length: '((Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpRequestStream)Request.Body).Length' threw an exception of type 'System.NotSupportedException'
    Position: '((Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpRequestStream)Request.Body).Position' threw an exception of type 'System.NotSupportedException'
    ReadTimeout: 'Request.Body.ReadTimeout' threw an exception of type 'System.InvalidOperationException'
    WriteTimeout: '((Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpRequestStream)Request.Body).WriteTimeout' threw an exception of type 'System.NotSupportedException'
.net-core dotnet-httpclient kestrel-http-server
1个回答
0
投票

我已经找到答案,在dotnet core 3.x中。

  1. 使用Microsoft.AspNetCore.Mvc.NewtonsoftJson而不是NewtonsoftJson

  2. 添加services.AddControllers()。AddNewtonsoftJson();

    ]

https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-2.2&tabs=visual-studio#jsonnet-support中指出

© www.soinside.com 2019 - 2024. All rights reserved.