【问题标题】:Retrieve POST Request Body of Http client in C#在 C# 中检索 Http 客户端的 POST 请求正文
【发布时间】:2016-06-29 08:07:36
【问题描述】:

有什么方法可以在 C# 中检索 Http 客户端的 POST 请求正文?如果我的扩展方法是否将其正确添加到请求中,我只想检查我的 UT。这个函数不公平。

public static async Task<string> AddPostRequestBody<T>(this HttpClient httpclient, string RequestUrl, T classobject)
    {
        string json_body = Newtonsoft.Json.JsonConvert.SerializeObject(classobject);
        HttpRequestMessage RequestMessage = new HttpRequestMessage(HttpMethod.Post, RequestUrl);
        HttpResponseMessage response = await httpclient.PostAsync(RequestUrl, new StringContent(json_body));
        response = httpclient.SendAsync(RequestMessage).Result;
        string outputresult = await response.RequestMessage.Content.ReadAsStringAsync();
        return outputresult;
    }

请帮忙!

【问题讨论】:

  • 只用 Fiddler 检查传出的请求?
  • 或者使用浏览器网络工具中的网络标签?
  • 我正在为我的扩展方法编写一个 UT,所以我需要一些方法来检索代码中的主体。

标签: c# asp.net-mvc http-post httpclient http-request


【解决方案1】:

尝试使用 DelegatingHandler(我在实现 HMAC 时使用它来散列内容并添加必要的授权标头),这将使您能够访问内容。

CustomDelegatingHandler customDelegatingHandler = new CustomDelegatingHandler();
HttpClient client = HttpClientFactory.Create(customDelegatingHandler);

public class CustomDelegatingHandler : DelegatingHandler
{
    protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (request.Content != null)
        {
            byte[] content = await request.Content.ReadAsByteArrayAsync();
            // Do what you need with the content here
        }

        response = await base.SendAsync(request, cancellationToken);
        return response;
    }
}

【讨论】:

  • 你决定用不同的方式解决你的问题很好,但我至少仍然回答了你原来的问题,即使你的问题最终被你自己改变了。
【解决方案2】:

好的,所以我让它使用它而不是创建响应,我直接附加到请求消息并从中检索。简单的一个,但最初在发布的问题中,我通过将 json 字符串添加到响应中使其变得复杂。

public static string AddPostRequestBody<T>(this HttpClient httpclient, string requestUrl, T classObject)
    {
        string jsonBody = Newtonsoft.Json.JsonConvert.SerializeObject(classObject);
        HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, requestUrl);
        requestMessage.Content = new StringContent(jsonBody);
        string requestBody = requestMessage.Content.ReadAsStringAsync().Result;
        return requestBody;           
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2016-11-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多