Журналы IIS записывают только строку запроса и информацию заголовка без каких-либо данных POST.
Если вы используете IIS7, вы можете включить отслеживание неуспешных запросов для кода состояния 200. При этом будут записаны все данные, и вы сможете выбрать, какой тип данных включить.
В IIS6 или 7 вы можете использовать Application_BeginRequest в global.asax и создать собственную запись данных POST.
Или, в IIS7, вы можете написать модуль HTTP с собственной регистрацией.
+1 - мне нравится твой ответ гораздо лучше, чем мой собственный. Мне явно нужно прочитать о сбое отслеживания запросов, поскольку я, очевидно, не использовал IIS7 так часто, как должен.
Эван Андерсон
Как вы можете «выбрать, какой тип данных включить»?
Павел Чучува
1
Последний шаг мастера при создании правила FRT позволяет выбрать, какие данные включать. По умолчанию все включено.
Не похоже (из этого URL, который поделился Andyknas), что «расширенная регистрация» IIS регистрирует сообщения. Он предлагает вариант для «протоколирования клиента», которая будет войти сообщения определенного вида, но не все сообщения формы, которые ОП кажется быть с просьбой (и мне было интересно , о, я.)
чарли arehart
8
В управляемом коде вы можете использовать метод Response.AppendToLog. Этот метод добавляет данные в поле cs-uri-stem - общая длина составляет до 4100 символов (недокументировано). Если вы превысите этот предел, то значение, которое было бы зарегистрировано, будет заменено на «...»
Например, добавление чего-то вроде этого в файл Global.asax должно помочь (C #):
void Application_EndRequest(Object Sender, EventArgs e)
{
if( "POST" == Request.HttpMethod )
{
byte[] bytes = Request.BinaryRead(Request.TotalBytes);
string s = Encoding.UTF8.GetString(bytes);
if (!String.IsNullOrEmpty(s))
{
int QueryStringLength = 0;
if (0 < Request.QueryString.Count)
{
QueryStringLength = Request.ServerVariables["QUERY_STRING"].Length;
Response.AppendToLog( "&" );
}
if (4100 > ( QueryStringLength + s.Length ) )
{
Response.AppendToLog(s);
}
else
{
// append only the first 4090 the limit is a total of 4100 char.
Response.AppendToLog(s.Substring(0, ( 4090 - QueryStringLength )));
// indicate buffer exceeded
Response.AppendToLog("|||...|||");
// TODO: if s.Length >; 4000 then log to separate file
}
}
}
}
На момент написания этого комментария ограничение составляет не 4100, а 4 КБ, что составляет 4096. Поэтому этот код необходимо немного изменить, чтобы правильно регистрировать данные POST> 4 КБ.
Стивен V
1
Мне пришлось добавить HttpContext.Current.Request.InputStream.Position = 0; перед request.BinaryRead, в противном случае он вернул бы пустой массив
alex440
3
Хотя я понимаю, что это старый вопрос, я обнаружил, что этот код дал мне именно то, что мне нужно, текстовый файл с полными заголовками запроса и ответом, поместил его в ваш global.asax.cs:
Это создаст текстовый файл для каждого запроса (включая изображения), поэтому будьте осторожны, когда вы его используете. Я только использовал это, чтобы зарегистрировать определенные почтовые запросы.
Но обратите внимание, что функция FRT неявно ограничивает количество файлов журнала, которые она создает (что хорошо), поэтому вам нужно будет изменить это либо в пользовательском интерфейсе, либо через записи файла конфигурации - и с должной осторожностью относитесь к объему журналы, которые будут созданы даже в скромном веб-приложении.
Чарли Арехарт
0
Это выглядит обнадеживающе, хотя я еще не пробовал:
Чем это отличается от другого варианта, предлагаемого здесь, с кодом в global.asax.cs? Это будет работать только для запросов страниц ASP.NET, а не для других страниц, которые может обрабатывать IIS (php, cgi, jsp, cfml). Ссылка, которой я поделился, - это модуль, который можно включить в IIS для любого сайта (или на уровне сервера) для обработки любого типа запроса.
Ответы:
Журналы IIS записывают только строку запроса и информацию заголовка без каких-либо данных POST.
Если вы используете IIS7, вы можете включить отслеживание неуспешных запросов для кода состояния 200. При этом будут записаны все данные, и вы сможете выбрать, какой тип данных включить.
В IIS6 или 7 вы можете использовать Application_BeginRequest в global.asax и создать собственную запись данных POST.
Или, в IIS7, вы можете написать модуль HTTP с собственной регистрацией.
источник
В управляемом коде вы можете использовать метод Response.AppendToLog. Этот метод добавляет данные в поле cs-uri-stem - общая длина составляет до 4100 символов (недокументировано). Если вы превысите этот предел, то значение, которое было бы зарегистрировано, будет заменено на «...»
Например, добавление чего-то вроде этого в файл Global.asax должно помочь (C #):
источник
Хотя я понимаю, что это старый вопрос, я обнаружил, что этот код дал мне именно то, что мне нужно, текстовый файл с полными заголовками запроса и ответом, поместил его в ваш global.asax.cs:
Это создаст текстовый файл для каждого запроса (включая изображения), поэтому будьте осторожны, когда вы его используете. Я только использовал это, чтобы зарегистрировать определенные почтовые запросы.
источник
Попробуйте это в своем файле web.config, чтобы отследить все
источник
Это выглядит обнадеживающе, хотя я еще не пробовал:
https://www.codeproject.com/Tips/1213108/HttpModule-for-Logging-HTTP-POST-Data-in-IIS-Log
Чем это отличается от другого варианта, предлагаемого здесь, с кодом в global.asax.cs? Это будет работать только для запросов страниц ASP.NET, а не для других страниц, которые может обрабатывать IIS (php, cgi, jsp, cfml). Ссылка, которой я поделился, - это модуль, который можно включить в IIS для любого сайта (или на уровне сервера) для обработки любого типа запроса.
источник
Попробуйте включить следующее в настройках журнала IIS:
Метод (CS-метод)
URI Stem (cs-uri-stem)
URI-запрос (cs-uri-query)
источник