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

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

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

乔达摩   2020-03-22 我要评论
# 问题 是这样的,我.net core 2.1的项目,读取、获取Post请求内容的一段代码,大概这样: ``` [HttpPost] public async Task 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.g__Logged|12_1(ControllerActionInvoker invoker) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.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.g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker) at Microsoft.AspNetCore.Routing.EndpointMiddleware.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(); ``` 搞定: ![1584806891769](https://img2020.cnblogs.com/blog/641760/202003/641760-20200322001058505-1441685271.png) 问题不大,不过不想让大家重复趟坑。 参考自:

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们