2012-01-03 1 views
0

У меня есть страница redir, которая принимает некоторые параметры запроса, в частности параметр «страница», который, в свою очередь, имеет свои собственные параметры запроса. Упрощенная версия может выглядеть так.Как я могу сохранить свои параметры с помощью Sytem.Uri?

http://www.example.com/redir.aspx?page=[escaped адрес] & два = 2

Следующий тест завершается неудачей, так как конструктор System.Uri является неэкранированными мой внутренний параметры страницы. (Kthx!)

Assert.AreEqual(
    "http://www.ex.com/redir.aspx?page=inner.htm%3Fone%3D1%26two%3D2&three=3", 
    new Uri("http://www.ex.com/redir.aspx?page=inner.htm%3Fone%3D1%26two%3D2&three=3").ToString()); 

Я на самом деле получить http://www.ex.com/?page=inner.htm?one=1&two=2&three=3, который даже не похож на приличном URI мне, что с 2 знаками вопроса и не очень-то параметр, что «три» есть. Как вы можете видеть из теста, inner.htm имеет 2 параметра, один и два, а три для redir.

Я все мокрые? Это правильный способ передать URI в URI?

+0

Как насчет 'нового Uri ("http://www.ex.com/redir.aspx?" + Uri.EscapeDataString ("страница = inner.htm% 3Fone% 3D1% 26two% 3D2 & три = 3")); ' – keyboardP

ответ

0

Следующий тест не выполняется, поскольку конструктор System.Uri имеет значение , не сохраняя параметры моей внутренней страницы.

Нет, конструктор Uri делает правильную вещь. Тест терпит неудачу, потому что вы звоните Uri.ToString(), то есть broken by design.

Don't use Uri.ToString(). Вместо этого используйте Uri.AbsoluteUri.

// this works 
Assert.AreEqual(
    "http://www.ex.com/redir.aspx?page=inner.htm%3Fone%3D1%26two%3D2&three=3", 
    new Uri("http://www.ex.com/redir.aspx?page=inner.htm%3Fone%3D1%26two%3D2&three=3").AbsoluteUri); 
+0

wow .. безупречный! Спасибо за помощь! – GaryB96