我在SO上发现了其他一些可以解决此问题的问题;但是,所有这些问题似乎都是在发送的请求类型(内容类型是问题)还是模型绑定方面存在问题。在我的情况下,错误似乎在action方法的末尾引发在Ok
上。
到目前为止,我已经尝试了以下方法:
FromBody
属性application/json
的身份发送Patch
只是为了看看会发生什么,但是问题仍然存在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();
}
答案 0 :(得分:0)
问题最终是与我创建的自定义中间件中的错误有关。我重播了两次请求。
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
。我的假设是请求流已经被读取,并且已经被处理或读取到最后。
答案 1 :(得分:0)
当我尝试学习HttpPath时遇到了同样的问题。我发现根本原因是:我没有在邮递员中传递“ Content-Length”值。