如何使用System.Uri保持我的参数转义?

时间:2012-01-03 19:33:12

标签: .net http

我有一个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的正确方法吗?

1 个答案:

答案 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);