2013-03-06 131 views
2

關於在stackoverflow上訪問HttpRequest有很多問題,但我還沒有找到一個我可以使用的問題。如果有人能指出我的答案,我將不勝感激。訪問MVC4中的原始http請求

我的問題是,我想以最簡單的方式修改現有的應用程序,以便添加完整的請求日誌記錄。我知道這可以通過Http模塊和IIS日誌記錄或使用Log4net等完成。但我不想使用任何這些技術,因爲應用程序是不可預知的,所以我需要一個不需要任何配置更改的解決方案在所有。

我已將OnActionExecuted添加到基本控制器。

protected override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    // todo: log request from filter context .... 
    base.OnActionExecuted(filterContext); 
} 

在上面的「待辦事項」部分,我希望讀取原始http請求並將其保存到數據庫文件中。記錄到數據庫很簡單,但是序列化或以其他方式將http請求轉換爲字符串的最佳方式是什麼?

謝謝

回答

10
protected override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    var request = filterContext.HttpContext.Request; 
    var inputStream = request.InputStream; 
    inputStream.Position = 0; 
    using (var reader = new StreamReader(inputStream)) 
    { 
     string headers = request.Headers.ToString(); 
     string body = reader.ReadToEnd(); 
     string rawRequest = string.Format(
      "{0}{1}{1}{2}", headers, Environment.NewLine, body 
     ); 
     // TODO: Log the rawRequest to your database 
    } 
} 

哦,如果你開始這樣做,我希望你已經規劃您將需要爲您的服務器購買額外的存儲預算。如果您開始記錄每個請求上的整個原始請求,則需要存儲。

+0

完美的作品謝謝你。關於磁盤使用情況的一點指出,所以只用於調試,歡呼! – sa555 2013-03-06 08:10:07