该UriBuilder.Query
属性"包含URI中包含的任何查询信息." 根据文档,"查询信息根据RFC 2396进行转义."
基于此,并且由于此属性是可写的,我假设在设置它时,System.UriBuilder
将解析您的查询字符串,并根据RFC 2396转义(url编码).特别是,{和}不在非保留字符集中,所以他们应该根据RFC 2396的第9页进行转义.但是,似乎System.UriBuilder
没有做任何逃避.
我是否需要手动Server.URLEncode params,还是有办法System.UriBuilder
处理编码?
这是我的示例代码.你可以在ideone.com上运行它,看看确实没有URL编码.
using System; public class Test { public static void Main() { var baseUrl = new System.Uri("http://www.bing.com"); var builder = new System.UriBuilder(baseUrl); string name = "param"; string val = "{'blah'}"; builder.Query = name + "=" + val; // Try several different ouput methods; none will be URL encoded Console.WriteLine(builder.ToString()); Console.WriteLine(builder.Uri.ToString()); Console.WriteLine(builder.Query); } }
spender.. 13
builder.Uri.AbsoluteUri
是你正在寻找的机器人,在你的情况下,返回
http://www.bing.com/?param=%7B'blah'%7D
鉴于困难知道是否&
,+
或=
符号应编码与否,它可能会更好,当你分配到做自己的转义.Query
财产.