使用Salesforce OpenAPI生成的.NET类通过外部ID更新账户失败求助
解决Salesforce通过外部ID更新Account的404错误问题
核心原因
你的调用方式不符合Salesforce外部ID更新的API规则:默认的AccountPATCH方法是针对原生Id字段设计的,直接传入外部ID值会被Salesforce误认为是原生ID,甚至错误地把外部ID值当成字段名(从错误信息Provided external ID field does not exist or is not accessible: 1331054可以看出,系统把你的外部ID值1331054当成了字段名)。
具体解决步骤
1. 检查OpenAPI规范并重新生成.NET类
Salesforce的外部ID更新需要单独的API路径,格式为:
/services/data/v{version}/sobjects/Account/{ExternalIdFieldName}/{ExternalIdValue}
而原生ID更新的路径是:
/services/data/v{version}/sobjects/Account/{Id}
- 打开你使用的Salesforce OpenAPI规范文件,确认是否包含外部ID更新的PATCH路径定义。
- 如果没有,需要手动添加该路径(参考Salesforce REST API的外部ID更新规则),然后重新生成.NET类。生成后的类会新增类似
AccountByExternalIdPATCH的方法,参数包含外部ID字段名、外部ID值、内容类型和请求体。
2. 调整代码调用方式
如果已经生成了支持外部ID的方法,调用示例如下:
Webhook.AccountByExternalIdPATCH("ContactNumberNav__pc", "1331054", "application/json", AccountSObject);
如果没有自动生成对应的方法,可以手动构造HTTP请求:
using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "your-access-token"); var jsonPayload = JsonConvert.SerializeObject(AccountSObject); var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json"); var response = await client.PatchAsync( "https://your-salesforce-instance/services/data/v59.0/sobjects/Account/ContactNumberNav__pc/1331054", content ); response.EnsureSuccessStatusCode(); }
3. 验证外部ID字段的配置和权限
- 字段属性检查:登录Salesforce Setup,找到
Account对象的ContactNumberNav__pc字段,确认已勾选「外部ID」选项,且字段状态为激活。 - 权限检查:确认当前API调用的用户(或其所属Profile/Permission Set)拥有
ContactNumberNav__pc字段的读权限(更新操作需要先定位到对应的记录)。
4. 调试确认请求路径
通过抓包工具(如Fiddler、Charles)查看实际发送的请求URL,确保路径格式正确:
- 错误路径:
/sobjects/Account/1331054 - 正确路径:
/sobjects/Account/ContactNumberNav__pc/1331054
内容的提问来源于stack exchange,提问作者user3644868
相关产品推荐
相关产品推荐

