专栏首页嘿dotNetAsp.Net Core 3.1 获取不到Post、Put请求的内容 System.NotSupportedException Specified method is not supported

Asp.Net Core 3.1 获取不到Post、Put请求的内容 System.NotSupportedException Specified method is not supported

问题

是这样的,我.net core 2.1的项目,读取、获取Post请求内容的一段代码,大概这样:

[HttpPost]
public async Task<IActionResult> Test([FromBody]string postStr)
{

    using (var reader = new StreamReader(Request.Body, System.Text.Encoding.UTF8))
    {
        reader.BaseStream.Seek(0, SeekOrigin.Begin);  //大概是== Request.Body.Position = 0;的意思
        var readerStr = await reader.ReadToEndAsync();
        reader.BaseStream.Seek(0, SeekOrigin.Begin);  //读完后也复原

        return Ok(readerStr);
    }
}

但这段代码 在 .net core 3.1.0 和 .net core 3.1.2(没错特地升级过) 都读不到、获取不到Post的内容:

curl --location --request POST 'http://localhost:5001/api/TestPostReader/test' \
--header 'Content-Type: application/json' \
--data-raw '{"name":"hei"}'

报异常:

System.NotSupportedException: Specified method is not supported.
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpRequestStream.Seek(Int64 offset, SeekOrigin origin)
   at Push.WebApi.Controllers.TestPostReaderController.Test() in D:\工作\39\solution-push\Push.WebApi\Controllers\TestPostReaderController.cs:line 21
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

解决

StartUp Configure 这里改成这样:

app.Use((context, next) =>
{
    context.Request.EnableBuffering();
    return next();
});
//这个在后边
app.UseRouting();

搞定:

问题不大,不过不想让大家重复趟坑。

参考自:

https://github.com/dotnet/aspnetcore/issues/15009

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署

    创建web项目(我自己使用vs2017 ,如使用vscode的需要自己安装windows的SDK和使用dotnet命令)

    乔达摩@嘿
  • C# dev GridControl绑定数据不能显示

    乔达摩@嘿
  • C# devExpress GridControl 统计行总数

    DevExpress.XtraGrid.Columns.GridColumn col_Profit = gridView1.Columns[0...

    乔达摩@嘿
  • asp.net core发布到docker报Microsoft.ApplicationInsights.AspNetCore miss的错误

    dotnet core 2.1的asp.net core在docker下部署的时候发生下面的错误。 Error: An assembly specified...

    kklldog
  • 用 Keras 搭建 GAN:图像去模糊中的应用(附代码)

    2014年 Ian Goodfellow 提出了生成对抗网络(GAN)。这篇文章主要介绍在Keras中搭建GAN实现图像去模糊。所有的Keras代码可点击这里。

    AI研习社
  • 北大肖臻《区块链技术与应用》05

    在看区块链安全的论文过程中还是有些提到了以太坊。所以还是决定继续把这套课程刷完。

    安包
  • 标星72K,确遭GitHub全面封杀!

    YouTube-dl是一款万能下载神器,它能够从全网七百多个网站免费下载视频,包括YouTube、优酷、爱奇艺、B站等热门网站;它还可以把视频内容转成任意的格式...

    Rocky0429
  • 排序算法(一)

    数组排序算法是一个经典的算法问题,这类排序算法非常多,比如我们熟知的冒泡排序、插入排序、快速排序等算法。这篇文章主要说一下五种排序算法:

    多云转晴
  • 地摊经济,不应是流量争夺新战场

    如果我们寻找今年来得快,去得也快的所谓的风口,或许要数“地摊经济”莫属了。前一天,我们都还在谈论着地摊经济,后一天,地摊经济便在人间蒸发。很多人摩拳擦掌,跃跃欲...

    孟永辉
  • kvm 虚拟机 转换成vmware虚拟机

    # qemu-img convert Monitor.img –O vmdk ./Monitor.vmdk

    三杯水Plus

扫码关注云+社区

领取腾讯云代金券