如何逃避&?

时间:2018-03-21 12:04:09

标签: c# salesforce soql

我正在尝试通过我的C#应用​​程序中的Saleforce的REST客户端运行以下查询,

Select Id, Name, Family FROM Product2 Where Name IN ('Connectivity - HMS','Database & Application Services', ....)

但是收到以下错误:

('Connectivity - HMS','Database 
                              ^
  

行的错误:1:列:83行1:83不匹配的字符'< EOF>'   期待'''

如果我用&删除名字,它可以正常工作在他们中间。

我正在使用ForceClient来运行查询:

var client = new ForceClient(_instanceUrl, _accessToken, _apiVersion);
Task<QueryResult<dynamic>> queryResult = client.QueryAsync<dynamic>(query);
queryResult.Wait();

我尝试了很多不同的东西来代替&amp;像Regex.Replace, &amp;, \\&但没有任何效果。

同样的查询在Developer Console中完美运行。

1 个答案:

答案 0 :(得分:1)

为了通过HTTP链接将&字符作为参数值的一部分发送到服务器,例如:'Database & Application Services',它将需要进行编码。

在这种情况下,由于对服务器的调用是通过REST Web服务进行的,并且REST服务使用URL和查询字符串,因此您应该对查询字符串进行编码,以确保作为参数一部分的所有非控制字符都是正确编码。

根据您的喜好或情况,使用以下三种方法之一:

System.Uri.EscapeDataString
System.Web.HttpUtility.HtmlEncode
System.Web.Mvc.Url.Encode

如果您在服务器端需要解码人们发送的内容,请使用:

Systen.Uri.UnescapeDataString
System.Web.HttpUtility.HtmlDecode

最后,如果您不在基于Web的项目中,则可以选择以下方法:

System.Net.WebUtility.UrlEncode
System.Net.WebUtility.UrlDecode