Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要一个非空的请求正文_C#_Asp.net Core - Fatal编程技术网

C# 需要一个非空的请求正文

C# 需要一个非空的请求正文,c#,asp.net-core,C#,Asp.net Core,我在这里发现了一些其他问题,以便解决这个问题;然而,所有这些问题似乎都在发送的请求类型中存在问题,无论是内容类型还是模型绑定。在我的情况下,这个错误似乎是在action方法末尾的Ok上抛出的 到目前为止,我已经尝试了以下方法: 从主体添加/删除属性 确保我的测试框架Swagger以application/json 我尝试更改为补丁,只是想看看会发生什么,但问题仍然存在 我还尝试将返回值从Ok更改为NoContent,但问题仍然存在 正如我在上面所说的,我确实一步一步地完成了这段代码,并验证了

我在这里发现了一些其他问题,以便解决这个问题;然而,所有这些问题似乎都在发送的请求类型中存在问题,无论是内容类型还是模型绑定。在我的情况下,这个错误似乎是在action方法末尾的
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”值