C# 附加两个字符串时插入附加字符。为什么?

C# 附加两个字符串时插入附加字符。为什么?,c#,string,c#-4.0,salesforce,visual-studio-2013,C#,String,C# 4.0,Salesforce,Visual Studio 2013,我正在尝试连接visual studio和salesforce。在visual studio中,我必须构建url以请求令牌。使用Append()函数将url构建为stringbuilder对象。我在rest控制台中使用url时获取令牌。但是在VisualStudio中生成的url在密码和安全令牌之间插入了一个额外的字符。这个额外的字符只有在我选择ANSI编码时才能看到 StringBuilder body = new StringBuilder(); //body.Append("cod

我正在尝试连接visual studio和salesforce。在visual studio中,我必须构建url以请求令牌。使用
Append()
函数将url构建为
stringbuilder
对象。我在rest控制台中使用url时获取令牌。但是在VisualStudio中生成的url在密码和安全令牌之间插入了一个额外的字符。这个额外的字符只有在我选择ANSI编码时才能看到

StringBuilder body = new StringBuilder();
    //body.Append("code=" + code + "&");
    body.Append("grant_type=password&");
    body.Append("client_id=" +clientID +"&");
    body.Append("client_secret="+clientSecret+"&");
    body.Append("username="+username+"&");
    body.Append("password=" + pass);
    body.Append(security_token);

        string result = HttpPost(URI, body.ToString());
/HttpPost()的代码

System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
    req.ContentType = "application/x-www-form-urlencoded";
    req.Method = "POST";

    // Add parameters to post
    byte[] data = System.Text.Encoding.ASCII.GetBytes(Parameters);
    req.ContentLength = data.Length;
    System.IO.Stream os = req.GetRequestStream();
    os.Write(data, 0, data.Length);
    os.Close();

    // Do the post and get the response.
    System.Net.WebResponse resp = req.GetResponse();
    if (resp == null) return null;
    System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
    return sr.ReadToEnd().Trim();

运行上述代码会在
密码
安全令牌
之间插入一个附加字符,从而产生
System.Net.WebException
。获取响应时发生异常。有人能告诉我原因吗?

您没有提供引发错误的代码。既然您提到字符串是URL,那么我猜浏览器会添加额外的字符。因此,我建议使用UrlEncode对您的URL进行编码。并使用UrlDecode将原始URL读回

HttpServerUtility.UrlEncode(body.ToString());

要了解有关UrlEncode的更多信息,请访问

提供最基本的测试用例源代码。代码看起来不错。您的代码没有显示结果字符串的错误。@wilx如果密码是abc123,安全令牌是hjasys23wh,那么附加的字符串是abc123?hjasys23wh。输出变量的值(pass,security_token),您很可能会注意到附加字符已经在其中;上面的代码不会“神奇地”插入一些字符。显示这些变量是如何填充的,问题可能就在那里。