在.NET 4.5之前,我使用request.InputStream来读取数据并将其保存到数据库中。但是,现在不使用" Classic"输入流读取机制,它使用缓冲输入流。
在模块中,当我尝试读取流时,我必须检查模式。但是我无法读取BufferedInputStream,因为它已经被读取并且它不可寻找。
基本上我在模块中有这个
public void Init(HttpApplication context)
{
context.EndRequest += EndRequest;
}
private void EndRequest(object sender, EventArgs e)
{
var application = (HttpApplication)sender;
var request = application.Request;
Stream requestInputStream = null;
if (application.Request.ReadEntityBodyMode == ReadEntityBodyMode.Buffered)
{
// This is not readable...
requestInputStream = request.GetBufferedInputStream();
}
else
{
requestInputStream = request.InputStream;
}
}
我现在找到的唯一技巧是访问BeginRequest
中的request.InputStream,然后在该点保存流。但是,我的流将永远保持经典模式;我相信这会破坏这个.NET 4.5缓冲输入流的目的。
现在有更好的方法来阅读这个BufferedInputStream吗?
(完整代码开源:RequestLoggerModule.cs)