首页 新闻 会员 周边 捐助

.NET core 3.0 webapi 查看reques ContentLength 有长度,读取body却为空

0
悬赏园豆:20 [已解决问题] 解决于 2020-01-08 08:34

查看reques ContentLength 有长度,读取body却为空
代码如下:
var reader = new System.IO.StreamReader(Request.Body);
string contentFromBody = await reader.ReadToEndAsync();

contentFromBody 为空

我post的是一个Json字符串

腐乳的主页 腐乳 | 初学一级 | 园豆:12
提问于:2020-01-07 15:14
< >
分享
最佳答案
0

读取之前加上下面的代码

Request.EnableBuffering();
收获园豆:20
dudu | 高人七级 |园豆:30948 | 2020-01-07 15:17

还是不行,还有个问题Request.Body.Length一直是0

腐乳 | 园豆:12 (初学一级) | 2020-01-07 15:22

@腐乳: 是否可以提供重现这个问题的示例代码?

dudu | 园豆:30948 (高人七级) | 2020-01-07 17:20

@dudu:
[Route("AddProfit")]
public async Task<ActionResult<Result>> AddProfit(ProfitBase model)
{
string SupplierRoleId = model.SupplierRoleId;

            Request.EnableBuffering();
            Request.Body.Seek(0, System.IO.SeekOrigin.Begin);
            var reader = new System.IO.StreamReader(Request.Body);
            string contentFromBody = await reader.ReadToEndAsync();
        }

我想用这个接口接不同种类型的参数。
ProfitBase 是一个基类,利用这个基类先把一些数据取出来,然后再取request里取出请求的json

腐乳 | 园豆:12 (初学一级) | 2020-01-07 17:24

@腐乳: model 绑定时已经将 Request.Body 中的数据都读掉了

dudu | 园豆:30948 (高人七级) | 2020-01-07 17:28

@dudu: 不能回去重新读么

腐乳 | 园豆:12 (初学一级) | 2020-01-07 17:29

@腐乳: 在model 绑定之前没有进行 Request.EnableBuffering()

dudu | 园豆:30948 (高人七级) | 2020-01-07 17:31

@腐乳: 可以通过 middleware 在请求进入 asp.net core web api 之前进行 Request.EnableBuffering()

dudu | 园豆:30948 (高人七级) | 2020-01-07 17:34
其他回答(2)
0

Request.Body.Seek(0, SeekOrigin.Begin);
加上这一行,再读

pencile | 园豆:845 (小虾三级) | 2020-01-07 15:18

还是不行,还有个问题Request.Body.Length一直是0

支持(0) 反对(0) 腐乳 | 园豆:12 (初学一级) | 2020-01-07 15:22
0

可以吧入参和接收参数的详细代码贴出来看下。

沐雪架构师 | 园豆:67 (初学一级) | 2020-01-07 16:49

[Route("AddProfit")]
public async Task<ActionResult<Result>> AddProfit(ProfitBase model)

这个model的类型ProfitBase是个基类,实际上会有不同类型的数据进来,打算通过request.body来解析,但是解析不出来

支持(0) 反对(0) 腐乳 | 园豆:12 (初学一级) | 2020-01-07 16:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册