Web API 从 .NET Framework 4.7 升级到 .NET 8 后,控制器无法获取请求的正文值

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

因此,将 ASP .NET Web API 从 .NET Framework 升级到 .NET 8 后,所有控制器的端点都无法从请求正文获取任何值。即使控制器无法从主体获取值,API 中间件也可以获取该值。

这是我第一次尝试修复的端点之一:

        [HttpPost]
        [Route("~/alliance/Dispositivo/ValidarUsuario")]
        public Models.Usuario PostValidarUsuario([FromBody] Dispositivo dispositivo)
        {
            Models.Usuario usuario = UsuarioDL.pa_validar_usuario(
                                                    dispositivo.Usuario,
                                                    dispositivo.Password,
                                                    dispositivo.LocalId);
            var usuarioInfo = DispositivoDL.pa_validar_dispositivo(dispositivo, usuario);
            if (usuario == null)
                usuario = new Models.Usuario(usuarioInfo);
            else
                usuario.UpdateUsuarioInfo(usuarioInfo);

            return usuario;
        }

这是我目前从邮递员那里得到的结果:

Postman's result

{
    "Type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
    "Title": "One or more validation errors occurred.",
    "Status": 400,
    "Errors": {
        "$": [
            "The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. Path: $ | LineNumber: 0 | BytePositionInLine: 0."
        ],
        "dispositivo": [
            "The dispositivo field is required."
        ]
    },
    "traceId": "00-08fa4fba4ab19ff884fd34ee4e4251e8-2f9a05b74a5f573f-00"
}

我还尝试从 Request 属性获取值,但结果始终是空字符串。

此外,我还确保 Content-Type 标头值为 application/json

c# .net asp.net-core-webapi
1个回答
0
投票

@Alexander Burov 的评论

您提到了一些具有价值的中间件。也许它会读完流?您可以尝试调用 s.Seek(0) 重置它。 – 亚历山大·布罗夫

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