답변:
IIS는 POST 데이터없이 쿼리 문자열 및 헤더 정보 만 기록합니다.
IIS7을 사용하는 경우 상태 코드 200에 대해 실패한 요청 추적을 활성화 할 수 있습니다. 그러면 모든 데이터가 기록되며 포함 할 데이터 유형을 선택할 수 있습니다.
IIS6 또는 7에서 global.asax의 Application_BeginRequest를 사용하여 POST 데이터에 대한 고유 한 로깅을 작성할 수 있습니다.
또는 IIS7에서 사용자 지정 로깅을 사용하여 HTTP 모듈을 작성할 수 있습니다.
관리 코드에서는 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
}
}
}
}
이것이 오래된 질문이라는 것에 감사하지만이 코드는 내가 필요한 것을 정확하게 요청했습니다. 전체 요청 헤더와 응답이있는 텍스트 파일을 global.asax.cs에 넣으십시오.
protected void Application_BeginRequest(Object Sender, EventArgs e)
{
string uniqueid = DateTime.Now.Ticks.ToString();
string logfile = String.Format("C:\\path\\to\\folder\\requests\\{0}.txt", uniqueid);
Request.SaveAs(logfile, true);
}
이렇게하면 모든 요청 (이미지 포함)마다 텍스트 파일이 생성되므로 사용 위치에주의하십시오. 특정 게시물 요청을 기록하는 데만 사용했습니다.
web.config 파일에서 이것을 시도하여 모든 것을 추적하십시오.
<tracing>
<traceFailedRequests>
<remove path="*" />
<add path="*">
<traceAreas>
<add provider="ASP" verbosity="Verbose" />
<add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
<add provider="ISAPI Extension" verbosity="Verbose" />
<add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI,WebSocket,Rewrite" verbosity="Verbose" />
</traceAreas>
<failureDefinitions timeTaken="00:00:00" statusCodes="200-999" />
</add>
</traceFailedRequests>
</tracing>
아직 시도하지는 않았지만 고무적인 것처럼 보입니다.
https://www.codeproject.com/Tips/1213108/HttpModule-for-Logging-HTTP-POST-Data-in-IIS-Log
global.asax.cs의 코드와 함께 여기에 제공된 다른 옵션과 어떻게 다릅니 까? IIS가 처리 할 수있는 다른 페이지 (php, cgi, jsp, cfml)가 아닌 ASP.NET 페이지 요청에만 작동합니다. 내가 공유 한 링크는 IIS에서 모든 사이트 (또는 서버 수준)가 모든 유형의 요청을 처리 할 수 있도록하는 모듈에 대한 것입니다.