【问题标题】:Access HttpRequestMessage from GetAsync exception从 GetAsync 异常访问 HttpRequestMessage
【发布时间】:2021-10-24 14:24:22
【问题描述】:

我怎样才能从GetAsync异常中得到HttpRequestMessage

try {
  using var responseMsg = await httpClient.GetAsync(requestUri);
  var requestMessage = responseMsg.RequestMessage;

} catch (Exception ex) {
  var requestMessage = ????
  Log(requestMessage.Headers);
}

【问题讨论】:

    标签: c# dotnet-httpclient


    【解决方案1】:

    可以在尝试前手动创建HttpRequestMessage,然后使用HttpClient发送:

    HttpRequestMessage httpRequest = new HttpRequestMessage
    {
        Method = HttpMethod.Get,
        RequestUri = uri
    };
    
    try
    {
        HttpClient client = new HttpClient();
        var response = await client.SendAsync(httpRequest);
    }
    catch(Exception ex)
    {
        var x = httpRequest.Headers;
    }
    

    在trycatch之外创建的对象,可以在各个部分使用。

    【讨论】:

    • 我认为在新的 HttpRequestMessage 之后你需要()
    • @kofifus 如果您使用对象初始化程序,则无需显式调用无参数 ctor。请阅读the following MSDN article了解更多详情。
    • 你不需要using HttpRequestMessage httpRequest = ... 因为HttpRequestMessage 是一次性的吗?
    • @kofifus 你是对的,该对象实现了iDisposeable,因此它可以与using 一起使用,根据this 如果你不手动处理它们,GC 将启动并执行给你。
    • @kofifus HttpRequestMessage's Dispose 当你有一个请求主体并且你想确保流不会超过请求对象时可能会很有趣。在 GET 的情况下,显式处理并不重要。
    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多