UriBuilder.Query属性“包含uri中包含的任何查询信息。”According to the docs,“根据rfc 2396对查询信息进行转义。”
基于此,并且由于此属性是可写的,所以我假设当您设置它时,System.UriBuilder将解析您的查询字符串,并根据rfc 2396转义(url encode)。尤其是{和}不在未保留字符集中,因此they should be escaped according to page 9 of RFC 2396。但是,似乎System.UriBuilder没有进行任何转义。
是否需要手动对参数进行server.urlencode编码,或者是否有方法获取System.UriBuilder来处理编码?
这是我的示例代码。你可以run this on ideone.com and see that, indeed, nothing is URL encoded

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);
    }
}

最佳答案

builder.Uri.AbsoluteUri

你要找的机器人,在你的情况下,会返回
http://www.bing.com/?param=%7B'blah'%7D
考虑到知道是否应该对&+=符号进行编码的困难,在分配给.Query属性时最好自己进行转义。

关于c# - UriBuilder.query为什么不转义(URL编码)查询字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24576239/

10-10 06:20