You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RestClient无BaseUrl定义问题求助:C#同步MongoDB到Salesforce报错

解决RestSharp中BaseUrl不存在的报错问题

你的报错是因为RestSharp v107及以上版本已经移除了BaseUrl属性,旧版本的API在新版本中不再兼容,而你使用的代码基于旧版RestSharp,所以会出现该错误。以下是两种可行的解决方案:


方案一:创建新的RestClient实例(推荐)

直接为Salesforce数据请求创建独立的RestClient,传入目标实例URL,无需修改原有认证用的client,逻辑更清晰:

修正后的完整代码

using System;
using System.Collections.Generic;
using MongoDB.Bson;
using MongoDB.Driver;
using Newtonsoft.Json.Linq;
using RestSharp;

namespace SalesforceToMongoDB
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 向Salesforce请求认证令牌
            var authClient = new RestClient("https://login.salesforce.com");
            var authRequest = new RestRequest("/services/oauth2/token", Method.Post);
            authRequest.AddParameter("grant_type", "password");
            authRequest.AddParameter("client_id", "your_client_id");
            authRequest.AddParameter("client_secret", "your_client_secret");
            authRequest.AddParameter("username", "your_username");
            authRequest.AddParameter("password", "your_password");

            RestResponse authResponse = authClient.Execute(authRequest);
            JObject obj = JObject.Parse(authResponse.Content);
            string accessToken = (string)obj["access_token"];

            // 2. 创建新的RestClient查询Salesforce联系人数据
            var dataClient = new RestClient("https://your-instance.lightning.force.com");
            var dataRequest = new RestRequest("/services/data/v50.0/query/?q=SELECT+FirstName,LastName,Email+FROM+Contact", Method.Get);
            dataRequest.AddHeader("Authorization", "Bearer " + accessToken);

            RestResponse dataResponse = dataClient.Execute(dataRequest);
            obj = JObject.Parse(dataResponse.Content);
            var contacts = new List<BsonDocument>();
            foreach (var record in obj["records"])
            {
                var contact = new BsonDocument();
                // 处理字段为null的情况,避免空引用异常
                contact.Add("FirstName", record["FirstName"]?.ToString() ?? string.Empty);
                contact.Add("LastName", record["LastName"]?.ToString() ?? string.Empty);
                contact.Add("Email", record["Email"]?.ToString() ?? string.Empty);
                contacts.Add(contact);
            }

            // 3. 将数据写入MongoDB
            var mongoClient = new MongoClient("mongodb://localhost:27017");
            var mongoDatabase = mongoClient.GetDatabase("SFContacts");
            var mongoCollection = mongoDatabase.GetCollection<BsonDocument>("Contacts");

            mongoCollection.InsertMany(contacts);
        }
    }
}

方案二:修改现有RestClient的Options(复用实例)

如果需要复用同一个RestClient,可以通过client.Options.BaseUrl替代旧版的BaseUrl属性:

核心修改片段

// 获取access_token后,修改现有client的基础URL
client.Options.BaseUrl = new Uri("https://your-instance.lightning.force.com");
request = new RestRequest("/services/data/v50.0/query/?q=SELECT+FirstName,LastName,Email+FROM+Contact", Method.Get);
request.AddHeader("Authorization", "Bearer " + accessToken);

RestResponse response = client.Execute(request);

额外提示

  • 方案一更适合你的场景:认证请求和数据请求的基础URL不同,分开实例能避免配置冲突,代码可读性更高。
  • 代码中添加的?.ToString() ?? string.Empty是为了处理Salesforce返回字段为null的情况,防止新手遇到空引用异常。

内容的提问来源于stack exchange,提问作者iluvcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:12:45