C# Request.InputStream 读取输入流为空的原因处理_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C# Request.InputStream 读取输入流为空的原因处理

C# Request.InputStream 读取输入流为空的原因处理

 2017/11/1 13:11:36  doson  程序员俱乐部  我要评论(0)
  • 摘要:今天在手机App测试接口的时候发现一个通过POST方式的接口获取body中的参数一直为空,但是在数据量小的时候却可以获取到数据,开始怀疑是不是POST的长度有限制,然后在web.config中修改了一下maxRequestLength,如下<system.web><httpRuntimetargetFramework="4.5"maxRequestLength="20480"/></system.web>然后发现获取的值还是为空
  • 标签:C# 原因

今天在手机App测试接口的时候发现一个通过POST方式的接口 获取body中的参数一直为空,但是在数据量小的时候却可以获取到数据,开始怀疑是不是POST的长度有限制,然后在web.config中修改了一下maxRequestLength,如下

class="brush:csharp;gutter:true;"><system.web>
    <httpRuntime targetFramework="4.5" maxRequestLength="20480" />
  </system.web>

然后发现 获取的值还是为空,然后在调试的过程中发现当数据量多的时候Request.InputStream的Position居然是在结束位置,如下图

从上图可以看出,因为Request.InputStream肯定是被读过了所以Position会在结束位置,一般Positon都是0。所以获取body中的参数一直为空,知道原因后在读取流之前把Position设置为0就可以了

var stream = HttpContext.Current.Request.InputStream;
                    stream.Position = 0;
                    using (var streamReader = new StreamReader(stream, Encoding.UTF8))
                    {
                        requestData = streamReader.ReadToEndAsync().Result;
                        requestData = ("appKey" + appKey + requestData + "timestamp" + timestamp).ToUpper();
                        stream.Position = 0;
                    }

  

但为什么在数据量大的时候Request.InputStream的Position会在结束位置,还不知道,希望有大侠指教!

 

发表评论
用户名: 匿名