如何从HttpClient获取最后一个网址?

azn*_*y84 22 c# redirect httpclient

好的,我最近切换到.NET framework 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;
Run Code Online (Sandbox Code Playgroud)

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

erm*_*ana 32

因此,从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);
Run Code Online (Sandbox Code Playgroud)

  • 如果您只对重定向URL感兴趣,而不是对URL(资源)的内容感兴趣,那么添加`HttpCompletionOption.ResponseHeadersRead`作为`GetAsync()`调用的第二个参数非常重要.否则,您将在能够获取重定向URL之前下载整个资源 - 假设该资源是1GB文件! (6认同)
  • HttpResponseMessage.RequestMessage指的是导致响应消息的请求.HttpResponseMessage.RequestMessage.RequestUri引用的是请求的uri而不是响应被重定向到的最后一个uri.参考:http://msdn.microsoft.com/en-us/library/system.net.http.httpresponsemessage.aspx (4认同)
  • Re:@stormwild的注释--HttpResponseMessage.RequestMessage确实引用原始请求中使用的相同对象,但是HttpClient会将HttpRequestMessage.RequestUri修改为最后一个uri获取的. (3认同)