2013-03-06 2 views
2

Есть много вопросов о доступе к HttpRequest в stackoverflow уже, но я еще не смог найти тот, который я могу использовать. Если бы кто-нибудь мог указать мне на ответ, я был бы благодарен.Доступ к необработанному HTTP-запросу в MVC4

Моя проблема заключается в том, что я хочу изменить существующее приложение простейшим способом, чтобы добавить в журнал полного запроса. Я знаю, что это можно сделать с помощью Http-модулей и ведения IIS или использования Log4net и т. Д. Но я не хочу использовать какой-либо из этих методов, потому что приложение непредсказуемо, поэтому мне нужно решение, которое не требует каких-либо изменений конфигурации вообще.

Я добавил OnAction Выполнено на базовый контроллер.

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

В верхней части «todo» я хочу прочитать необработанный 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 
    } 
} 

Ох, и если вы начинаете делать это, я надеюсь, что вы уже запланировали бюджет, который потребуется для приобретения дополнительного пространства на своих серверах. Coz, если вы начнете регистрировать весь необработанный запрос по каждому запросу, который вам понадобится для хранения.

+0

Прекрасно работает. Point отметил использование диска, поэтому используйте это только для отладки, ура! – sa555

Смежные вопросы