IIS 7 Log Request Body
je dois enregistrer la charge utile de la requête post pour les requêtes faites à L'IIS. Est-ce possible de configurer la journalisation des charges utiles request post avec les modules de journalisation existants et de journalisation avancée dans IIS 7.5 ou est-ce que quelqu'un peut me diriger vers n'importe quel module personnalisé qui me permettra de journaliser la charge utile post.
3 réponses
C'est peut-être fait, selon https://serverfault.com/a/90965 , qui, ironiquement, est une réponse à la question que David Silva Smith lié dans sa réponse ici, affirmant qu'il ne peut pas être fait ;)
les journaux de L'IIS n'enregistrent que les informations de requête et d'en-tête sans toutes les données POST.
si vous utilisez IIS7, vous pouvez activer le traçage des requêtes échouées pour code d'état 200. Qui enregistrera toutes les données et vous pouvez sélectionner quel type de données inclure.
j'ai réussi à créer un fichier texte pour mes requêtes qui contenait l'intégralité de la requête( en-têtes et réponse), je l'ai utilisé uniquement pour enregistrer les requêtes spécifiques post:
protected void Application_BeginRequest(Object Sender, EventArgs e)
{
string uniqueid = Guid.NewGuid().ToString();
string logfile = String.Format("C:\path\to\folder\requests\{0}.txt", uniqueid);
Request.SaveAs(logfile, true);
}
espérons que cela vous aide!
voici le code du module HTTP personnalisé que nous utilisons pour enregistrer les données des requêtes HTTP POST.
using System;
using System.Web;
namespace MySolution.HttpModules
{
public class HttpPOSTLogger : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
private void context_BeginRequest(object sender, EventArgs e)
{
if (sender != null && sender is HttpApplication)
{
var request = (sender as HttpApplication).Request;
var response = (sender as HttpApplication).Response;
if (request != null && response != null && request.HttpMethod.ToUpper() == "POST")
{
var body = HttpUtility.UrlDecode(request.Form.ToString());
if (!string.IsNullOrWhiteSpace(body))
response.AppendToLog(body);
}
}
}
}
}
n'oubliez pas de l'enregistrer sur le web.configuration de votre application.
utiliser le système.Le serveur web de la section pour IIS Modèle Intégré
<system.webServer>
<modules>
<add name="HttpPOSTLogger" type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules" />
</modules>
</system.webServer>
utiliser le système.section web pour IIS Classic Model
<system.web>
<httpModules>
<add name="HttpPOSTLogger" type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules"/>
</httpModules>
</system.web>
journal IIS Avant d'appliquer le module:
::1, -, 10/31/2017, 10:53:20, W3SVC1, machine-name, ::1, 5, 681, 662, 200, 0, POST, /MySolution/MyService.svc/MyMethod, -,
journal IIS Après l'application de module:
::1, -, 10/31/2017, 10:53:20, W3SVC1, machine-name, ::1, 5, 681, 662, 200, 0, POST, /MySolution/MyService.svc/MyMethod, {"model":{"Platform":"Mobile","EntityID":"420003"}},
Complet article:
https://www.codeproject.com/Tips/1213108/HttpModule-for-logging-HTTP-POST-data-in-IIS-Log