gpt4 book ai didi

c# - 需要一个非空的请求体

转载 作者:行者123 更新时间:2023-12-05 03:58:54 24 4
gpt4 key购买 nike

我在 SO 上发现了其他一些解决此问题的问题;但是,所有这些问题似乎都在发送的请求类型方面存在问题,无论内容类型是问题还是模型绑定(bind)。在我的情况下,错误似乎是在操作方法末尾的 Ok 上引发的。

到目前为止,我已经尝试了以下方法:

  • 添加/删除 FromBody 属性
  • 确保我的测试框架 Swagger 作为 application/json 发送
  • 我尝试更改为 补丁 只是为了看看会发生什么,但问题仍然存在
  • 我还尝试将返回值从 Ok 更改为 NoContent,但问题仍然存在

正如我上面所说,我确实逐步执行了这段代码并验证了我点击了映射代码并且所有属性都已正确映射。用户本身确实在数据库中得到更新。只有在执行退出操作方法(在 Ok 之后)被调用后才会抛出错误。所以这让我更加失望,因为错误坚持我的请求正文是空的。

除了实际的空请求正文或错误的内容类型负载之外,是否还有其他原因会引发此错误?

    /// <summary>
/// Updates the provided account and setting information
/// </summary>
/// <param name="vm"></param>
[HttpPost]
[ProducesResponseType(200)]
[ProducesResponseType(400, Type=typeof(string))]
public async Task<IActionResult> UpdateAccountInfo([FromBody]UpdateAccountInfoViewModel vm)
{
var appModel = _mapper.Map<ChartLog.Application.Models.UpdateAccountInfoModel>(vm);
appModel.UserId = User.GetUserId().Value;

await _accountApp.UpdateAccountAndSettings(appModel);
return Ok();
}

最佳答案

问题最终出现在我创建的自定义中间件中的错误。我重播了两次请求。

  public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
string stringBody = string.Empty;
try
{
await next(context).ConfigureAwait(false);
}
catch (Exception ex)
{
if (context.Request.Body.CanSeek)
{
stringBody = await FormatRequest(context.Request).ConfigureAwait(false);
}
await HandleExceptionAsync(context, ex, stringBody).ConfigureAwait(false);
}

//await next(context).ConfigureAwait(false);
}

被注释掉的代码是罪魁祸首。如果没有异常发生,那么它将退出尝试并重播相同的 RequestDelegate。我的假设是请求流已经被读取并且已经被释放或读取到最后。

关于c# - 需要一个非空的请求体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57565314/

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