我想知道发送给用户的响应事件后为了记录目的而发送的确切时间。有没有办法从asp.net中的HttpModule(在PostRequestHandlerExecute事件中)执行此操作。PostRequestHandlerExecute中的响应长度
0
A
回答
1
不幸的是,HttpResponse.OutputStream
是只写,所以这是不是非常简单 - 任何尝试一下输出流的Length
属性将抛出异常。
我见过的唯一解决方案是对Response
对象应用过滤器,以便过滤器可以计算字节数。
快速谷歌搜索landed me here,这似乎接近我记得的实现。
1
希望它帮助
context.PostRequestHandlerExecute += delegate(object sender, EventArgs e)
{
HttpContext httpContext = ((HttpApplication)sender).Context;
HttpResponse response = httpContext.Response;
// Don't interfere with non-HTML responses
if (response.ContentType == "text/html")
{
response.Filter = new MyRewriterStream(response.Filter);
}
};
MyRewriterStream类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Web;
namespace ExecutionTime
{
public class MyRewriterStream:Stream
{
#region "Propiedades"
private Stream _sink;
#endregion
public MyRewriterStream(System.IO.Stream stream)
{
_sink = stream;
}
public override void Write(byte[] buffer, int offset, int count)
{
string outStr;
outStr = UTF8Encoding.UTF8.GetString(buffer, offset, count);
strPageSize = strPageSize + outStr;
StringBuilder sb = new StringBuilder(outStr);
if (sb.ToString().LastIndexOf("</html>") > 0)
{
string HtmlResponse = "";//HERE PUT YOUR NEW HTML RESPONSE
sb.AppendLine(HtmlResponse);
byteArray = Encoding.ASCII.GetBytes(sb.ToString());
_sink.Write(byteArray, 0, byteArray.Length);
}
else
{
_sink.Write(buffer, offset, count);
}
}
public override void Flush()
{
_sink.Flush();
}
#region Properites
public override bool CanRead
{
get { return true; }
}
public override bool CanSeek
{
get { return true; }
}
public override bool CanWrite
{
get { return true; }
}
//public override void Flush()
//{
// _sink.Flush();
//}
public override long Length
{
get { return 0; }
}
private long _position;
public override long Position
{
get { return _position; }
set { _position = value; }
}
#endregion
#region Methods
public override int Read(byte[] buffer, int offset, int count)
{
return _sink.Read(buffer, offset, count);
}
public override long Seek(long offset, SeekOrigin origin)
{
return _sink.Seek(offset, origin);
}
public override void SetLength(long value)
{
_sink.SetLength(value);
}
public override void Close()
{
_sink.Close();
}
#endregion
}
}
相关问题
- 1. Odata响应长度
- 2. HTTP HEAD响应 - 设置内容长度
- 3. WCF:检查响应内容长度
- 4. Instagram API响应 - 数组长度奇怪
- 5. 如何限制HttpClient响应长度
- 6. 如何使用Node.js中的http.request限制响应长度
- 7. 如何从ajax响应中找到$(xml)标记的长度
- 8. 如何计算React Native/JS中JSON响应的长度?
- 9. 将长度限制在TextField中作为响应js
- 10. 在HEAD响应中避免内容长度
- 11. JMeter中的响应时间很长
- 12. 模拟Angular 2中的长响应
- 13. 需要很长时间处理的HTTP响应的进度
- 14. 获取没有内容长度的http请求的响应?
- 15. 成功回调长度的响应数组是不确定的
- 16. 内容长度:0的JSON响应的Symfony2
- 17. 响应高度
- 18. Goutte/GuzzleHTTP获取响应主体的内容长度/大小
- 19. 如何知道响应的长度(HttpWebRequest.GetResponse()。GetResponseStream())
- 20. 如何获取Django响应对象的内容长度?
- 21. HTTP响应411需要的长度,Http客户端4.0.1 Android
- 22. sql查询速度。对长时间的响应
- 23. 具有较长高度图像的响应背景
- 24. 使用角度响应表和响应表的响应表
- 25. AOL OpenID响应太长
- 26. “长度和长度”与Python中的“长度”有什么不同?
- 27. 长期运行中没有响应
- 28. 响应进度条
- 29. 响应高度HTML
- 30. HTML响应速度