2009-11-18 26 views
1

这两个属性有什么区别?HttpWebRequest.Address vs HttpWebResponse.ResponseUri

放入上下文中,我确定是否发生重定向,如果我们的ResponseUri!= RequestUri。

重定向发生时,无论URL http://adage.com/adages/article?article_id=140560将提供与地址(http://adage.com/adages/post?article_id=140560)不同的ResponseUri(http://adage.com/adages/post.php)。

看来ResponseUri获取Content-Location标题并在地址保持正确的位置时使用它。

将RequestUri与HttpWebRequest.Address进行比较以检查重定向是否正确?

回答

2

是,比较request.RequestUrirequest.Address是要走的路。至少在Monoresponse.ResponseUrirequest.Address相同。

0

你有没有想过设置request.AllowAutoRedirect = false,然后重新发送请求重定向?

的URI比较也应该可以正常工作,虽然我不知道所有的边缘情况

+0

我已经考虑了AllowAutoRedirect设置为false,但是如果我能够与当前的比较,我冒昧为处理重定向。 – Pat 2009-11-18 20:19:29

1

我知道这是一个古老的问题,但我在研究这个主题时发现它,并且发现它实际上没有正确回答。

虽然HttpWebRequest.AddressHttpWebResponse.ResponseUri应该始终是相同的,这里的区别是:

  • HttpWebResponse.Address将返回页面实际响应
  • HttpWebResponse.ResponseUri的URI将返回Content-Location头的值(如果存在)。虽然文档没有明确说明如果Content-Location标题不存在会发生什么情况,但假定它将使用与Address相同的值。

还记得HTTP头可以伪造,所以微软建议使用Address而不是ResponseUri出于安全原因。

http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.responseuri.aspx

相关问题