如何记录进入IIS的HTTP请求

xggvc2p6  于 2023-03-08  发布在  其他
关注(0)|答案(5)|浏览(244)

我在我的开发机器上运行IIS 5。我有一个asp.net3.5 Web服务在上面运行,我从同一服务器上运行的另一个Web应用程序调用它。我的服务返回错误500内部服务器错误,我正在排除它。我的请求是通过System.Net.HttpWebReques t对象发送的,从客户端的Angular 看它是有效的。
我想从服务器的Angular 查看原始的传入HTTP请求,因为服务是在环回上调用的,所以我无法使用Wireshark查看它。
IIS日志记录显示请求标头,但不显示发布内容。
关于如何在IIS中看到完整的原始传入HTTP请求,有什么建议吗?
谢谢

vbkedwbf

vbkedwbf1#

我认为您需要添加一个HTTPModule用于日志记录。Here's这是一篇关于ASP.NET模块和处理程序的非常好的文章:
这样,当您想禁用日志记录时,您只需从web.config文件中删除/注解它即可。

ukxgm1gy

ukxgm1gy2#

你试过使用Fiddler吗?只要使用你的机器名而不是localhost。

vs91vp4v

vs91vp4v3#

最好的办法是在不同的端口上运行每个web应用程序,然后使用类似Fiddler的东西为你想监视的端口创建一个代理,这样就可以监视所有进出你特定应用程序的流量。

1sbrub3j

1sbrub3j4#

下面是我们用来记录HTTP POST请求数据的自定义HTTP模块的代码。

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

yhived7q

yhived7q5#

我能够记录包含许多数据(请求正文包括http post等)的请求/响应,包括所有http动词(例如:获取、发布)使用IIS Failed Request Tracing

请求不一定需要失败记录,因为您可以在那里指定任何http状态,如200、401等或全部(输入100-999)。
您还可以只记录具有特定URL的请求

稍后我将实现一个定制的http模块以获得更多的控制。
谢谢

相关问题