获取使用 HttpClient 和 HttpRequestMessage 发送的原始请求

Get the raw request that is sent with HttpClient and HttpRequestMessage

在我的 C# 代码 运行 .NET 6(Azure 函数)中,我使用 HttpClient 发送 HttpRequestMessage。它不起作用,但它应该起作用,所以我想获得我发送的 raw 请求,包括 header,这样我就可以与文档进行比较并查看差异。

过去我使用过 Fiddler,但它现在对我不起作用,可能是因为我笔记本电脑上的一些安全设置。因此,我正在 Visual Studio 2022 或 .NET 6 的世界中寻找解决方案,我可以在其中获取原始请求以进行故障排除。

这个问题与代码无关,但无论如何这是我的代码。

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://myendpoint.com/rest/something");

var apiToken = "AOU9FrasdgasdfagtHJNV";
request.Headers.Add("Authorization", "Basic " + apiToken);

var message = new
{
    sender = "Hey",
    message = "Hello world",
    recipients = new[] { new { id = 12345678} }
};

request.Content = new StringContent(JsonSerializer.Serialize(message), Encoding.UTF8, "application/json");
request.Headers.Add("Accept", "application/json, text/javascript");
HttpResponseMessage response = await httpClient.SendAsync(request);

调用 SendAsync 时,我想知道到底发送了什么,包括 header 和内容。

如果您不能使用任何代理解决方案(如 Fiddler),那么我可以看到 2 个选项。一个在您的问题的评论中描述为使用 DelegatingHandler。您可以在描述 DelegatingHandlers

的文章的 documentation. What is interesting is that HttpClient supports logging out of the box which is described in this section https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-6.0#logging 中阅读更多相关信息

如果您担心某些东西会操纵传出请求,那么您可以实施选项 2。这是创建临时 asp.net 核心应用程序,并将 .UseHttpLogging() 中间件插入管道,如此处所述https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-logging/?view=aspnetcore-6.0 这样你就可以从被请求的应用程序的角度确切地知道你的请求是什么样子的。现在,如果您将您的 azure 函数指向您的临时应用程序 - 您应该看到发送的内容

希望对您有所帮助