2013-03-06 5 views
2

Il y a déjà beaucoup de questions sur l'accès à HttpRequest sur stackoverflow, mais je n'ai pas encore trouvé celui que je peux utiliser. Si quelqu'un pouvait me diriger vers une réponse, je serais reconnaissant.Accéder à la requête http brute dans MVC4

Mon problème est que je veux modifier une application existante de la manière la plus simple possible afin d'ajouter une journalisation complète des requêtes. Je suis conscient que cela peut être fait avec les modules Http et la journalisation IIS ou en utilisant Log4net etc etc Mais je ne veux pas utiliser l'une de ces techniques parce que l'application est imprévisible, donc j'ai besoin d'une solution qui ne nécessite aucun changement de configuration du tout.

J'ai ajouté OnActionExecuted à un contrôleur de base. Dans la partie «todo» ci-dessus, je souhaite lire la requête http brute et l'enregistrer dans un fichier de base de données. La journalisation dans une base de données est assez simple mais quelle est la meilleure façon de sérialiser ou de convertir la requête http en chaîne?

Merci

Répondre

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 
    } 
} 

Oh, et si vous commencez à faire cela, je l'espère, vous avez déjà prévu le budget dont vous aurez besoin pour l'achat de stockage supplémentaire sur vos serveurs. Coz si vous commencez à enregistrer toute la requête brute sur chaque requête, vous aurez besoin de stockage.

+0

Fonctionne parfaitement merci. Point noté à propos de l'utilisation du disque, donc seulement l'utiliser pour le débogage, bravo! – sa555

Questions connexes