首页 > 解决方案 > 使用 C# HttpClient 登录 Salesforce

问题描述

我似乎无法让这段代码工作:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://login.salesforce.com");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
client.DefaultRequestHeaders.Add("User-Agent", "SFAPIClient"); //Random Client
var parameters = new Dictionary<string, string>();
parameters["grant_type"] = "password";
parameters["client_id"] = CLIENT_ID;
parameters["client_secret"] = CLIENT_SECRET;
parameters["username"] = t_username.Text;
parameters["password"] = t_password.Text;
var response = await client.PostAsync("https://login.salesforce.com/services/oath2/token", new FormUrlEncodedContent(parameters));
var responseString = await response.Content.ReadAsStringAsync();

Salesforce 不断响应“此 url 不再存在”,这是 CURL 在我开始工作之前所响应的内容。

我试图模仿的 CURL 代码是:

curl [salesforce url] -d "grant_type=password" -d "client_id=[clientId]" -d "client_secret=[clientSecret]" -d "username=[username]" -d "password=[password]"

^ 运行后服务器响应:

{"access_token":"[token]","instance_url":[etc...]}"

我希望在 C# 中得到相同的响应 - 到目前为止它一直很烦人。

卷曲输出:

输出

标签: c#salesforcedotnet-httpclient

解决方案


client.PostAsync("https://login.salesforce.com/services/oath2/token")有一个错字 - 应该是oauth2,你漏掉了一个字母。

您还可以查看Salesforce 的 .NET SDK ,该 SDK将这个特定序列包装到一个单行中。


推荐阅读