Мне нужно регистрировать полезную нагрузку запроса для запросов, поступающих в IIS. Возможно ли это настроить ведение журнала сообщений с полезными нагрузками запроса с существующими протоколами ведения журнала и расширенными модулями ведения журнала в IIS 7.5 или может ли кто-нибудь направить меня на любые пользовательские модули, которые позволят мне регистрировать почтовую полезную нагрузку.
Модуль запроса журнала IIS 7
Ответ 1
На самом деле это можно сделать в соответствии с https://serverfault.com/a/90965, что по иронии судьбы является ответом на вопрос, связанный с ним Дэвидом Сильва Смитом в его ответе здесь, утверждая, что это не может быть сделано;)
Журналы IIS записывают только информацию о querystring и заголовке без любые данные POST.
Если вы используете IIS7, вы можете включить Failed Request Tracing для код состояния 200. Это будет записывать все данные, и вы можете выбрать какой тип данных должен включать.
Ответ 2
Мне удалось создать текстовый файл для моих запросов, содержащий весь запрос (заголовки и ответ), я использовал его только для регистрации конкретных почтовых запросов:
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);
}
Надеюсь, это поможет вам!
Ответ 3
Вот код настраиваемого HTTP-модуля, который мы используем для регистрации данных запроса 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);
}
}
}
}
}
Не забудьте зарегистрировать его в web.config вашего приложения.
Используйте раздел system.WebServer для интегрированной модели IIS
<system.webServer>
<modules>
<add name="HttpPOSTLogger" type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules" />
</modules>
</system.webServer>
Используйте раздел system.web для классической модели IIS
<system.web>
<httpModules>
<add name="HttpPOSTLogger" type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules"/>
</httpModules>
</system.web>
Журнал IIS Перед применением модуля:
::1, -, 10/31/2017, 10:53:20, W3SVC1, machine-name, ::1, 5, 681, 662, 200, 0, POST, /MySolution/MyService.svc/MyMethod, -,
Журнал IIS После применения модуля:
::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"}},
Полная статья:
https://www.codeproject.com/Tips/1213108/HttpModule-for-logging-HTTP-POST-data-in-IIS-Log