我想知道發送給用戶的響應事件後爲了記錄目的而發送的確切時間。有沒有辦法從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響應的未知長度
- 3. DIV對用戶名長度的響應
- 4. HTTP HEAD響應 - 設置內容長度
- 5. Instagram API響應 - 數組長度奇怪
- 6. AFNetworking - 獲取響應內容長度
- 7. WCF:檢查響應內容長度
- 8. 如何延長的時間長度HTTP響應
- 9. 如何獲取ASP.net Web API控制器中響應的長度?
- 10. MVC4中計算響應長度的簡單方法
- 11. 如何計算React Native/JS中JSON響應的長度?
- 12. 如何從ajax響應中找到$(xml)標記的長度
- 13. 如何使用Node.js中的http.request限制響應長度
- 14. 按內容長度分割http響應頭部和主體長度
- 15. 在HEAD響應中避免內容長度
- 16. 將長度限制在TextField中作爲響應js
- 17. JMeter中的響應時間很長
- 18. 模擬Angular 2中的長響應
- 19. URL中的SAML響應時間太長
- 20. 內容長度:0的JSON響應的Symfony2
- 21. 獲取沒有內容長度的http請求的響應?
- 22. 成功回調長度的響應數組是不確定的
- 23. 需要很長時間處理的HTTP響應的進度
- 24. 響應寬度
- 25. 響應高度
- 26. 使用瓶子和cherrypy記錄響應內容的長度
- 27. Goutte/GuzzleHTTP獲取響應主體的內容長度/大小
- 28. 如何知道響應的長度(HttpWebRequest.GetResponse()。GetResponseStream())
- 29. HTTP響應411需要的長度,Http客戶端4.0.1 Android
- 30. HTTP響應看起來是空的,但內容長度很高