Dzienniki IIS rejestrują tylko kwerendę i informacje nagłówkowe bez żadnych danych POST.
Jeśli używasz usług IIS7, możesz włączyć śledzenie nieudanych żądań dla kodu stanu 200. Spowoduje to zarejestrowanie wszystkich danych i możesz wybrać, który typ danych ma zostać uwzględniony.
W IIS6 lub 7 możesz użyć Application_BeginRequest w global.asax i stworzyć własne rejestrowanie danych POST.
Lub w IIS7 możesz napisać moduł HTTP z własnym logowaniem niestandardowym.
+1 - podoba mi się twoja odpowiedź, znacznie lepsza niż moja. Oczywiście muszę czytać informacje o nieudanym śledzeniu żądań, ponieważ oczywiście nie używałem IIS7 tak często, jak powinienem.
Evan Anderson,
Jak „wybrać typ danych do uwzględnienia”?
Pavel Chuchuva
1
Ostatni krok kreatora podczas tworzenia reguły FRT pozwala wybrać dane do uwzględnienia. Domyślnie obejmuje wszystko.
Nie wydaje się (z tego adresu udostępnionego przez Andyknas), że dzienniki „zaawansowane rejestrowanie” IIS tworzą posty. Oferuje opcję „rejestrowania klienta”, która rejestrowałaby posty określonego rodzaju, ale nie wszystkie posty z formularzy, o które OP wydaje się prosić (a ja się nad tym zastanawiałem).
charlie arehart
8
W kodzie zarządzanym można użyć metody Response.AppendToLog. Ta metoda doda dane do pola cs-uri-stem - całkowita długość wynosi do 4100 znaków (nieudokumentowane). Jeśli przekroczysz ten limit, wówczas zarejestrowana wartość zostanie zastąpiona przez „...”
Na przykład dodanie czegoś takiego do pliku Global.asax powinno załatwić sprawę (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
}
}
}
}
W tym komentarzu limit nie wynosi 4100, to 4KB, który wynosi 4096. Więc ten kod musi zostać nieco zmodyfikowany, aby poprawnie rejestrować dane POST> 4KB.
Steven V
1
Musiałem dodać HttpContext.Current.Request.InputStream.Position = 0; przed request.BinaryRead, w przeciwnym razie zwróci pustą tablicę
alex440
3
Doceniam to stare pytanie, ale okazało się, że ten kod dał mi dokładnie to, czego potrzebowałem, plik tekstowy z kompletnymi nagłówkami żądań i odpowiedzią, umieść go w pliku global.asax.cs:
Spowoduje to utworzenie pliku tekstowego dla każdego żądania (w tym obrazów), więc bądź ostrożny tam, gdzie go używasz. Użyłem go tylko do rejestrowania konkretnych postów.
Należy jednak pamiętać, że funkcja FRT domyślnie ogranicza liczbę tworzonych plików dziennika (co jest dobrą rzeczą), dlatego należy to zmienić w interfejsie użytkownika lub za pomocą wpisów w pliku konfiguracyjnym - z zachowaniem ostrożności dzienniki, które zostałyby utworzone nawet w skromnej aplikacji internetowej.
charlie arehart
0
Wygląda zachęcająco, chociaż jeszcze tego nie próbowałem:
Czym różni się to od innej oferowanej tutaj opcji, z kodem w pliku global.asax.cs? Działa to tylko w przypadku żądań stron ASP.NET, a nie innych stron, które IIS może przetwarzać (php, cgi, jsp, cfml). Łącze, które udostępniłem, jest modułem, który można włączyć w IIS dla dowolnej witryny (lub na poziomie serwera) w celu przetworzenia dowolnego typu żądania.
Odpowiedzi:
Dzienniki IIS rejestrują tylko kwerendę i informacje nagłówkowe bez żadnych danych POST.
Jeśli używasz usług IIS7, możesz włączyć śledzenie nieudanych żądań dla kodu stanu 200. Spowoduje to zarejestrowanie wszystkich danych i możesz wybrać, który typ danych ma zostać uwzględniony.
W IIS6 lub 7 możesz użyć Application_BeginRequest w global.asax i stworzyć własne rejestrowanie danych POST.
Lub w IIS7 możesz napisać moduł HTTP z własnym logowaniem niestandardowym.
źródło
W kodzie zarządzanym można użyć metody Response.AppendToLog. Ta metoda doda dane do pola cs-uri-stem - całkowita długość wynosi do 4100 znaków (nieudokumentowane). Jeśli przekroczysz ten limit, wówczas zarejestrowana wartość zostanie zastąpiona przez „...”
Na przykład dodanie czegoś takiego do pliku Global.asax powinno załatwić sprawę (C #):
źródło
Doceniam to stare pytanie, ale okazało się, że ten kod dał mi dokładnie to, czego potrzebowałem, plik tekstowy z kompletnymi nagłówkami żądań i odpowiedzią, umieść go w pliku global.asax.cs:
Spowoduje to utworzenie pliku tekstowego dla każdego żądania (w tym obrazów), więc bądź ostrożny tam, gdzie go używasz. Użyłem go tylko do rejestrowania konkretnych postów.
źródło
Wypróbuj to w pliku web.config, aby śledzić wszystko
źródło
Wygląda zachęcająco, chociaż jeszcze tego nie próbowałem:
https://www.codeproject.com/Tips/1213108/HttpModule-for-Logging-HTTP-POST-Data-in-IIS-Log
Czym różni się to od innej oferowanej tutaj opcji, z kodem w pliku global.asax.cs? Działa to tylko w przypadku żądań stron ASP.NET, a nie innych stron, które IIS może przetwarzać (php, cgi, jsp, cfml). Łącze, które udostępniłem, jest modułem, który można włączyć w IIS dla dowolnej witryny (lub na poziomie serwera) w celu przetworzenia dowolnego typu żądania.
źródło
Spróbuj włączyć następujące ustawienia w ustawieniach dziennika IIS:
Metoda (metoda cs)
Trzonek URI (cs-uri-stem)
Zapytanie URI (cs-uri-query)
źródło