Sharepoint Microsoft Graph对修补(更新)列表项字段的调用是否区分大小写?
尝试在Microsoft graph上调用更新项API端点时,字段名似乎区分大小写。这里的文档没有说明这一点。对/fields端点的调用是否区分大小写 我正在尝试更新名为“Status”的单行文本字段(内部名称和显示名称均为“Status”(大写字母S)。从图形浏览器调用/v1.0/sites/{id}/lists/{id}/item{id}/fields端点时,调用失败如下:Sharepoint Microsoft Graph对修补(更新)列表项字段的调用是否区分大小写?,sharepoint,microsoft-graph-api,Sharepoint,Microsoft Graph Api,尝试在Microsoft graph上调用更新项API端点时,字段名似乎区分大小写。这里的文档没有说明这一点。对/fields端点的调用是否区分大小写 我正在尝试更新名为“Status”的单行文本字段(内部名称和显示名称均为“Status”(大写字母S)。从图形浏览器调用/v1.0/sites/{id}/lists/{id}/item{id}/fields端点时,调用失败如下: { "status":"testing" } 返回以下内容 { "error": {
{
"status":"testing"
}
返回以下内容
{
"error": {
"code": "invalidRequest",
"message": "Field 'status' is not recognized",
"innerError": {
"request-id": "8700ae5d-f2e5-4138-891a-f980630aa7d1",
"date": "2020-05-02T15:30:14"
}
}
}
但是,如果修补程序请求的主体如下所示:
{
"Status":"testing"
}
调用成功并返回正在更新的项、所有字段和正确更新的“状态”字段
考虑到我直接从C#调用API(使用HttpClient而不使用SDK,因此FieldValueSet在这里不是选项),并使用CamelCasePropertyNamesContractResolver进行JsonSerializerSettings,代码如下:
var request = new HttpRequestMessage(method, $"{graphEndpoint}{version}{uri}");
if (!string.IsNullOrEmpty(body))
{
request.Content = new StringContent(body, Encoding.UTF8, "application/json");
}
var response = await _httpClient.SendAsync(request);
身体总是驼峰式的,失败了。这是一个错误吗?如果不是,那么,鉴于我已经尝试过的大多数事情(JObject和其他人),什么被认为是更好的做法看起来像是真正的反向补偿黑客。这是SharePoint API的一个已知问题。中有一个相关的错误,特别是图表骆驼案例列名称。这是SharePoint API的一个已知问题。中有一个相关的错误,特别是图表骆驼案例列名称。为了寻找最终答案,我使用了以下方法 在类中,我定义了一个默认的驼峰大小写解析器
private readonly JsonSerializerSettings camelCaseJsonSettings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() };
private readonly JsonSerializerSettings defaultJsonSettings = new JsonSerializerSettings { ContractResolver = new DefaultContractResolver() };
在进行调用的方法中,我只是根据Http方法和当前包含SharePoint的uri选择要使用的设置
if (body != null && (method != HttpMethod.Get || method != HttpMethod.Delete))
{
if ((method != HttpMethod.Post) && (uri.Contains("/sites/")))
{
// Serialize the body to be pascal cased due to SP Bug
payload = JsonConvert.SerializeObject(body, defaultJsonSettings);
}
else
{
// Serialize the body with camelCasing
payload = JsonConvert.SerializeObject(body, camelCaseJsonSettings);
}
}
对于那些寻找最终答案的人,我使用以下方法 在类中,我定义了一个默认的驼峰大小写解析器
private readonly JsonSerializerSettings camelCaseJsonSettings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() };
private readonly JsonSerializerSettings defaultJsonSettings = new JsonSerializerSettings { ContractResolver = new DefaultContractResolver() };
在进行调用的方法中,我只是根据Http方法和当前包含SharePoint的uri选择要使用的设置
if (body != null && (method != HttpMethod.Get || method != HttpMethod.Delete))
{
if ((method != HttpMethod.Post) && (uri.Contains("/sites/")))
{
// Serialize the body to be pascal cased due to SP Bug
payload = JsonConvert.SerializeObject(body, defaultJsonSettings);
}
else
{
// Serialize the body with camelCasing
payload = JsonConvert.SerializeObject(body, camelCaseJsonSettings);
}
}
谢谢Marc。那么问题是,如果这是一个已知的bug,是否有任何建议的方法来解决这个问题或修复的ETA?我不知道有任何解决方法或ETA,但由于这至少从2012年就已经存在,我不会期望短期修复。再次感谢Marc。我在下面为任何寻求答案的人提供了我的解决方法。谢谢回复!谢谢Marc。那么问题是,如果这是一个已知的bug,是否有任何建议的方法来解决该问题或解决ETA问题?我不知道有任何解决方法或解决ETA问题的方法,但由于这至少从2012年开始就存在,我不希望有短期的解决方法。再次感谢Marc。我在下面为任何寻求a的人介绍了我的解决方法感谢您的回复!