【问题标题】:How to get last url from HttpClient?如何从 HttpClient 获取最后一个 url?
【发布时间】:2016-04-29 01:40:06
【问题描述】:

好的,我最近切换到 .NET 框架 4.5 并开始使用 HttpClient 而不是 HttpWebRequest & Response。 我真的很喜欢这种 async/await 风格,但我不知道如何在 POST / GET 请求后获取重定向的 url。

有了 HttpWebResponse 我可以使用 .ResponseUri 属性

HttpWebRequest request = (HttpWebRequest)WebRequest.Create ("http://www.google.com");
HttpWebResponse response = (HttpWebResponse)request.GetResponse ();
string responseURI = response.ResponseUri;

我花了 3 个小时搜索,但我仍然无法完成:(

【问题讨论】:

    标签: c# redirect httpclient


    【解决方案1】:

    因此,从 msdn 文章中,HttpResponseMessage 从 HttpClient 调用中作为任务返回。

    此 HttpResponseMessage 有一个名为 Request Message 的属性,它有一个名为 RequestUri 的属性,请务必查看此链接的属性部分。

    示例代码:

    // Create a New HttpClient object.
    HttpClient client = new HttpClient();
    HttpResponseMessage response = await client.GetAsync("http://www.yahoo.com/");
    response.EnsureSuccessStatusCode();
    string responseUri = response.RequestMessage.RequestUri.ToString();
    Console.Out.WriteLine(responseUri);
    

    【讨论】:

    • 好吧,最后我根本不能使用HttpClient,它缺少太多的基本功能。如果你能告诉我如何为 HttpClient 指定一个源 IP,我真的很感激,因为我的服务器有大约 10 个 IP 地址,我想全部使用它
    • @aznboy84 你能澄清你的要求吗?你想实现什么目标?
    • HttpResponseMessage.RequestMessage 是指导致响应消息的请求。 HttpResponseMessage.RequestMessage.RequestUri 指的是请求的 uri,而不是响应重定向到的最后一个 uri。参考:msdn.microsoft.com/en-us/library/…
    • 如果您只对重定向 URL 感兴趣,而不是 URL(资源)的内容,那么添加 HttpCompletionOption.ResponseHeadersRead 作为 GetAsync() 调用的第二个参数非常重要.否则,您将在获得重定向 URL 之前下载整个资源——想象一下,如果该资源是一个 1GB 的文件!
    • 回复:@stormwild 的评论 - HttpResponseMessage.RequestMessage 确实引用了原始请求中使用的相同对象,但是 HttpClient 会将 HttpRequestMessage.RequestUri 修改为最后获取的 uri。
    猜你喜欢
    • 1970-01-01
    • 2019-07-24
    • 2023-03-04
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多