我有一个redir页面,它接受一些查询参数,特别是一个“页面”参数,而该参数又有自己的查询参数。简化版本可能如下所示。
http://www.example.com/redir.aspx?page= [转发地址]& two = 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个问号是什么,并不是真正的“3”参数。从测试中可以看出,inner.htm有2个参数,一个和两个,三个用于redir。
我都湿了吗?这是将URI传递给URI的正确方法吗?
答案 0 :(得分: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);