在HttpApplication.BeginRequest事件中,如何读取整个原始请求正文?当我尝试读它时,InputStream的长度为0,导致我相信它可能已经被ASP.NET读取了。
我试图读这个InputStream:
using (StreamReader reader = new StreamReader(context.Request.InputStream)) { string text = reader.ReadToEnd(); }
但我得到的是一个空字符串。我把这个位置重新设置为0,但是当然,一旦这个流被读出来,它就没有了,所以没有办法。最后,检查流的长度返回0。
编辑:这是用于POST请求。
解决方法
请求对象未填充在BeginRequest事件中。您需要在事件生命周期中稍后访问此对象,例如Init,Load或PreRender。此外,您可能希望将输入流复制到内存流,因此可以使用seek:
protected void Page_Load(object sender,EventArgs e) { MemoryStream memstream = new MemoryStream(); Request.InputStream.CopyTo(memstream); memstream.Position = 0; using (StreamReader reader = new StreamReader(memstream)) { string text = reader.ReadToEnd(); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。