C# 将Force.com用于任意REST API方法

C# 将Force.com用于任意REST API方法,c#,rest,salesforce,C#,Rest,Salesforce,注:这是我的问题的副本。解决此问题后,我将同步两个线程 我在用电话。SOQL查询对我来说工作得很好,但我也在尝试进行一个简单的REST调用,类似于我可以使用REST Explorer工具进行的调用 我的代码是: using (var queryClient = new ForceClient(authClient.InstanceUrl, authClient.AccessToken, authClient.ApiVersion)) { // Works fine

注:这是我的问题的副本。解决此问题后,我将同步两个线程

我在用电话。SOQL查询对我来说工作得很好,但我也在尝试进行一个简单的REST调用,类似于我可以使用REST Explorer工具进行的调用

我的代码是:

 using (var queryClient = new ForceClient(authClient.InstanceUrl, authClient.AccessToken, authClient.ApiVersion))
    {
        // Works fine
        string soql = GetMyQuery();
        QueryResult<dynamic> result = await queryClient.QueryAsync<dynamic>(soql);

        // Throws exception.  Changing version # doesn't seem to have any effect.
        dynamic restResult = await queryClient.ExecuteRestApiAsync<dynamic>("/services/data/v46.0/sobjects/Task/describe");
使用(var queryClient=new ForceClient(authClient.InstanceUrl、authClient.AccessToken、authClient.ApiVersion))
{
//很好
字符串soql=GetMyQuery();
QueryResult结果=等待queryClient.QueryAsync(soql);
//抛出异常。更改版本似乎没有任何效果。
dynamic restResult=wait queryClient.executestatapiasync(“/services/data/v46.0/sobjects/Task/description”);
当我进入ExecuteStapiasync时,我得到一个异常:

Salesforce.Common.ForceException
 HResult=0x80131500
 Message=Could not find a match for URL
 Source=Salesforce.Common
 StackTrace:
  at Salesforce.Common.JsonHttpClient.<HttpGetAsync>d__4`1.MoveNext()
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
[...]
Salesforce.Common.ForceException
HResult=0x80131500
Message=找不到URL的匹配项
Source=Salesforce.Common
堆栈跟踪:
在Salesforce.Common.JsonHttpClient.d_u4`1.MoveNext()中
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
[...]
我假设我的参数“/services/data/v46.0/sobjects/Task/description”在REST资源管理器工具中运行良好,需要更改。但是我猜了很多不同的选项(不同的版本,有或没有前导URL字符串,等等),到目前为止还没有得到任何效果


有人能告诉我如何使用ForceClient获得与我从Salesforce Workbench REST Explorer获得的结果相同的结果吗?

我最后更仔细地查看了ForceClient代码。ExecuteStapiAsync不是正确的调用。对于我的特定示例,我发现有三种方法可以工作:

dynamic restResult = await queryClient.DescribeAsync<dynamic>("Task");
restResult = await queryClient.BasicInformationAsync<dynamic>("Task/describe/");
restResult = await queryClient.BasicInformationAsync<dynamic>("Task/describe");
dynamic restResult=wait queryClient.descripbeasync(“任务”);
restResult=wait queryClient.BasicInformationAsync(“任务/描述/”);
restResult=等待queryClient.BasicInformation同步(“任务/描述”);
(以上所有3行返回相同的结果)


这对sobjects来说很好。我认为目前不可能直接将这个库用于使用“分析”之类的东西在他们的REST API定义中,有两种变通方法不需要重新编译代码。我发现其中最干净、性能最好的是将您自己的HttpClient实例传递到ForceClient ctor中,并直接使用这些实例而不是ForceClient上的方法。对ForceClient代码的检查将揭示大多数方法都是精简的
string.Format()
HttpClient方法的包装器。

连接使用http请求/响应。因此,最简单的方法是使用wireshark或fiddler等嗅探器,将Workforce.com工具包中的第一个请求与不工作的c#应用程序进行比较。使c#请求看起来与Workforce.com工具包完全相同。