为什么UriBuilder.query没有转义(url编码)查询字符串?

Jos*_*osh 8 .net c#

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

spe*_*der 13

builder.Uri.AbsoluteUri
Run Code Online (Sandbox Code Playgroud)

是你正在寻找的机器人,在你的情况下,返回

http://www.bing.com/?param=%7B'blah'%7D

鉴于困难知道是否&,+=符号应编码与否,它可能会更好,当你分配到做自己的转义.Query财产.