1

这两个属性有什么区别?

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

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

看来 ResponseUri 采用 Content-Location 标头并在地址保持正确位置时使用它。

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

4

3 回答 3

2

是的,比较request.RequestUrirequest.Address是要走的路。至少在Mono response.ResponseUri中是一样的request.Address

于 2009-11-19T02:26:13.530 回答
1

我知道这是一个老问题,但我在研究这个话题时发现了它,并注意到它实际上并没有得到正确的回答。

虽然HttpWebRequest.Address并且HttpWebResponse.ResponseUri 应该始终相同,但区别如下:

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

请记住 HTTP 标头可以伪造,因此出于安全原因,Microsoft 建议使用Address而不是。ResponseUri

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

于 2014-03-07T15:28:23.973 回答
0

您是否考虑过设置 request.AllowAutoRedirect=false 然后在重定向时重新发出请求?

Uri 比较也应该可以正常工作,尽管我不确定所有的边缘情况

于 2009-11-18T15:28:25.840 回答