2009-11-18 4 views
1

Какая разница между этими двумя свойствами?HttpWebRequest.Address vs HttpWebResponse.ResponseUri

Чтобы установить контекст, я определяю, происходит ли перенаправление, если наш ResponseUri! = RequestUri.

В то время как перенаправление происходит независимо от URL http://adage.com/adages/article?article_id=140560, будет предоставлен другой ResponseUri (http://adage.com/adages/post.php), чем Адрес (http://adage.com/adages/post?article_id=140560).

Похоже, ResponseUri принимает заголовок Content-Location и использует его, пока адрес поддерживает правильное местоположение.

Правильно ли сравнивать RequestUri с HttpWebRequest.Address для проверки перенаправления?

ответ

2

Да, сравнивая request.RequestUri и request.Address это путь. По крайней мере, в Monoresponse.ResponseUri - это то же самое, что и request.Address.

0

Вы задумывались над установкой request.AllowAutoRedirect = false, а затем переизданием запроса на перенаправление?

Сравнение Uri должно работать нормально, хотя я не уверен, что из всех краевых случаев

+0

Я рассмотрел установки AllowAutoRedirect к ложным, однако, если я в состоянии справиться с переадресацией с текущим сравнения Рискну для этого. – Pat

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