C# 需要一个非空的请求正文
我在这里发现了一些其他问题,以便解决这个问题;然而,所有这些问题似乎都在发送的请求类型中存在问题,无论是内容类型还是模型绑定。在我的情况下,这个错误似乎是在action方法末尾的C# 需要一个非空的请求正文,c#,asp.net-core,C#,Asp.net Core,我在这里发现了一些其他问题,以便解决这个问题;然而,所有这些问题似乎都在发送的请求类型中存在问题,无论是内容类型还是模型绑定。在我的情况下,这个错误似乎是在action方法末尾的Ok上抛出的 到目前为止,我已经尝试了以下方法: 从主体添加/删除属性 确保我的测试框架Swagger以application/json 我尝试更改为补丁,只是想看看会发生什么,但问题仍然存在 我还尝试将返回值从Ok更改为NoContent,但问题仍然存在 正如我在上面所说的,我确实一步一步地完成了这段代码,并验证了
Ok
上抛出的
到目前为止,我已经尝试了以下方法:
- 从主体添加/删除
属性
- 确保我的测试框架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();
}
//
///更新提供的帐户和设置信息
///
///
[HttpPost]
[产品响应类型(200)]
[产品响应类型(400,类型=类型(字符串))]
公共异步任务UpdateAccountInfo([FromBody]UpdateAccountInfoViewModel vm)
{
var-appModel=\u mapper.Map(vm);
appModel.UserId=User.GetUserId().Value;
wait_accountApp.UpdateAccountAndSettings(appModel);
返回Ok();
}
问题最终在于我创建的自定义中间件中的一个bug。我重复了两次请求
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);
}
被注释掉的代码就是罪魁祸首。如果没有发生异常,则它将退出try并基本上重播相同的
RequestDelegate
。我的假设是请求流已经被读取,并且已经被释放或读取到最后。我在尝试学习HttpPath时遇到了同样的问题。我发现根本原因是:我没有在Postman中传递“Content Length”值