Answers:
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中包含代码)有何不同?这仅适用于ASP.NET页面请求,不适用于IIS可能处理的其他页面(php,cgi,jsp,cfml)。我共享的链接指向一个模块,该模块可以在IIS中为任何站点(或服务器级别)启用以处理任何类型的请求。