我正在尝试通过我的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, &, \\&
但没有任何效果。
同样的查询在Developer Console中完美运行。
答案 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