Salesforce REST Api是否有可用的C#包装器?

14
7个回答

10

7
如果你正在寻找Salesforce的REST API客户端库,请看一下SalesforceSharp
它支持从REST API创建、更新、删除和查询记录。
创建
client.Create("Account", 
   new { Name = "name created", Description = "description created" }));

更新

client.Update("Account", "<record id>", 
   new { Description = "description updated" }));

删除

client.Delete("Account", "<ID">);

查询

var records = client.Query<Account>("SELECT id, name, description FROM Account");

现在它支持用户名密码验证流程,但其他流程(Web服务器和用户代理)可以被创建和注入。

3
我真的希望有一种方法可以将WebResponse解析成代表返回SF资源的类,并具有可靠的错误处理 - 繁琐的事情 :) 这个存在 - 它被称为SOAP API :) 但说真的,如果您正在进行服务器端集成并想要生成类型化的类和可靠的错误处理,则SOAP是您的不二选择。

3

我使用RestSharp来简化调用并反序列化对象,但您仍然需要处理所有销售引擎的错误代码。它还内置了一些OAuth功能,但我使用的版本(大约2个月前)对OAuth 2支持不是很好。虽然有点麻烦,但如果您要拉取大量数据,则非常值得。


有趣,我会看一下RestSharp。我正在查看asp.net web api示例,他们通过OAuth2扩展访问Twitter:http://code.msdn.microsoft.com/Extending-HttpClient-with-8739f267 - GC.
谢谢提供链接,我一定会查看的。那个示例是用于OAuth2吗?虽然我还没有仔细研究,但我注意到了oauth_前缀,这在Salesforce OAuth2服务中并没有实现。 - Walter

2

嗯,据我所知没有。不过,具体取决于你想要在客户端还是服务器端使用它,你可以使用文档化的javascript方法(如restapi),或者在服务器端简单地使用System.Net.WebRequest

请查看Dan的.NET博客


谢谢您的答复。我会在服务器端使用它,以集成到其他系统中。我真的希望有一些东西可以将 WebResponse 解析成代表返回的 SF 资源的类,并具有可靠的错误处理 - 这很繁琐 :) - GC.
如果你想要强类型,你应该走WSDL的路线并使用Web服务。REST本身只是一种架构思想,而不是一组能够导致通用代码生成的协议。它甚至没有强制使用sf restApi所使用的JSON,也不包括任何标准化的元数据,你可以解析和创建类。理论上,你可以在开发过程中使用/sobjects/object_name/describe来检索元数据,然后为其创建类并使用JavaScriptSerializer.Deserialize<T>。然而,这听起来真的很麻烦 :) - mmix

1

这是使用密码工作流的示例代码。它获取访问令牌并查询API:

public static string Login()
{
    string responseJsonString = string.Empty;
    StringBuilder str = new StringBuilder();
    str.AppendFormat("{0}?grant_type=password&client_id={1}&client_secret={2}&username={3}&password={4}"
                     , LoginOAuthUrl, ClientID, ClientSecret, ClientUserName, ClientPassword);
    // Request token
    try
    {
        HttpWebRequest request = WebRequest.Create(str.ToString()) as HttpWebRequest;

        if (request != null)
        {
            request.Method = "POST";
            using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
            {
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    // Get the "access_token" and "instance_url" from the response.
                    // Convert the JSON response into a token object


                    // Here we get the response as a stream.
                    using (StreamReader responseStream = new StreamReader(response.GetResponseStream()))
                    {
                        responseJsonString = responseStream.ReadToEnd();
                        // Deserialize JSON response into an Object.
                        JsonValue value = JsonValue.Parse(responseJsonString);
                        JsonObject responseObject = value as JsonObject;
                        AccessToken = (string)responseObject["access_token"];
                        InstanceUrl = (string)responseObject["instance_url"];
                        return "We have an access token: " + AccessToken + "\n" + "Using instance " + InstanceUrl + "\n\n";
                    }
                }
            }
        }
        return responseJsonString;
    }
    catch (Exception ex)
    {
        throw new Exception(string.Format("Unable to login to salesforce: {0}", str), ex);
    }
}

public static string Query()
{            
    string RequestUrl = InstanceUrl + "/services/data/v28.0/query";
    string queryParam = "q=" + QUERY;
    // Read the REST resources
    string responseJsonString = HttpGet(RequestUrl, queryParam);
    return responseJsonString;
}

public static string HttpGet(string URI, string Parameters)
{
    // Add parameters to the URI
    string requestUri = URI + "?" + Parameters;
    System.Net.WebRequest req = System.Net.WebRequest.Create(requestUri);
    req.Method = "GET";
    req.Headers.Add("Authorization: OAuth " + AccessToken);

    // Do the GET request
    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();
}

0

加强对Salesforce的rest API建模的尝试,将其建模为一组接口。这些接口可以使用Reinforce.HttpClientFactory或手动使用RestEase转换为客户端。

https://github.com/deesejohn/Reinforce


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接