Sharepoint Microsoft Graph对修补(更新)列表项字段的调用是否区分大小写?

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": {

尝试在Microsoft graph上调用更新项API端点时,字段名似乎区分大小写。这里的文档没有说明这一点。对/fields端点的调用是否区分大小写

我正在尝试更新名为“Status”的单行文本字段(内部名称和显示名称均为“Status”(大写字母S)。从图形浏览器调用/v1.0/sites/{id}/lists/{id}/item{id}/fields端点时,调用失败如下:

{
    "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的人介绍了我的解决方法感谢您的回复!