MVC 错误处理Application_Error获取请求数据

第一种:直接获取输入流

Stream stream = Request.InputStream;

string json = string.Empty;

if (stream.Length > 0)

{

StreamReader sr = new StreamReader(stream);

json = sr.ReadToEnd();

}

 

第二种:

var json = string.Empty;

var EncodingName = Context.Request.ContentEncoding.HeaderName;

System.IO.Stream sm = Context.Request.InputStream;

if (sm != null)

{

sm.Seek(0, SeekOrigin.Begin);

int len = (int)sm.Length;

byte[] inputbyte = new byte[len];

sm.Read(inputbyte, 0, len);

sm.Close();

json = System.Text.Encoding.GetEncoding(EncodingName).GetString(inputbyte);

}

 

解析:

第一种  是直接获取Stream数据进行读取

第二种:设置当前流中的位置

 

我们一般时候使用第一种方法即可,毕竟不管读取文件还是获取请求的流  都是第一次读取此刻流的起始位置为0。

但是针对于MVC来说,数据流在action时候,框架内部机制已经获取到流的数据或者流已经close掉了。

我们此时在使用第一种方法是读取不到流的数据的。所以我们需要从新设置当前流的起始位置进行读取

即:sm.Seek(0, SeekOrigin.Begin);

简单理解就是:

request.inputstram这个只能读取一次,读取后就读取不到数据了。因为第二次再读取时可能已经到Stream的结尾了(EOFException)或者Stream已经close掉了,所以在此读取的时候需要从新设置下起始位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值