2013-03-06 132 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