使用Microsoft Graph API更新SharePoint列表项

时间:2018-03-26 16:25:00

标签: c# microsoft-graph sharepoint-online

我们正在尝试使用Microsoft Graph更新ListItem的字段。

当我们在Graph Explorer中使用PATCH命令时,一切正常。但是,只要我们想在C#中使用JSON尝试相同的操作,它就会向我们返回Bad Request

以下是我发送给Graph Explorer以更新字段的请求:

PATCH https://graph.microsoft.com/v1.0/sites/mysharepoint:/sites/mySite:/lists/myList/items/1582/fields`
Content-type: application/json

{"CaseNumber": "13XX17101310238"}

我们尝试执行的代码是:

string addItemJsonString = "{\"CaseNumber\":\"13XX17101310238\"}";
string requestUrl = sharepointURL + "/sites/mySharepointSiteID/lists/myList/items/1315/fields";

HttpClient client = new HttpClient();

HttpRequestMessage message = new HttpRequestMessage(new HttpMethod("PATCH"), requestUrl);
message.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
message.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
message.Content = new StringContent(addItemJsonString);

HttpResponseMessage response = await client.SendAsync(message);

发送的请求消息是

Method: PATCH, 
RequestUri: 'https://graph.microsoft.com/v1.0/sites/mySite:/sites/hha:/lists/myList/items/1584/fields', 
Version: 2.0, 
Content: System.Net.Http.StringContent, 
Headers:{  
    Accept: application/json  
    Authorization: Bearer eyJ0eXAiOiJKV1QiLCJub25jZSI6IkFRQUJBQUFBQUFCSGg0a21TX2FLVDVYcmp6eFJBdEh6Z3M3NHRlVmt2WEZiVF9lS21lR21sbk9jdlV5bnNFdEIwWGc0c2p3TUdNQTQ2NnNGRklUbXFSMjJVYWNRc1NlWVdOX1d0cXo3aFp2ZVd5MkZsZTAyenlBQSIsImFsZyI6IlJTMjU2IiwieDV0IjoiRlNpbXVGckZOb0Mwc0pYR212MTNuTlpjZURjIiwia2lkIjoiRlNpbXVGckZOb0Mwc0pYR212MTNuTlpjZURjIn0.eyJhdWQiOiJodHRwczovL2dyYXBoLm1pY3Jvc29mdC5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMzczZDNkODItMDdiZi00MjZiLWE4ZDItNjdhOWIzZWUwNGE1LyIsImlhdCI6MTUyMjE1MzA5NCwibmJmIjoxNTIyMTUzMDk0LCJleHAiOjE1MjIxNTY5OTQsImFjciI6IjEiLCJhaW8iOiJBVFFBeS84R0FBQUFQK00yQjRhWDNTSE43NlNPNHJUNmdzMFN4TEVTRzI1MlMvVng0eUlZM0tnMXF5UStRQjRSUkUrRzdvZlR5cUd3IiwiYWx0c2VjaWQiOiI1OjoxMDAzM0ZGRkE4NkNGRjg0IiwiYW1yIjpbInB3ZCJdLCJhcHBfZGlzcGxheW5hbWUiOiJQcm9saWZpYyBDYXJlIFNvbHV0aW9ucyIsImFwcGlkIjoiOGM1Yzg5ZDYtMjVmNi00Yjg2LWE2MmYtY2RiNTAxODY1NjFmIiwiYXBwaWRhY3IiOiIwIiwiZV9leHAiOjI2MjgwMCwiZW1haWwiOiJydXNzZWxsLm1hbm5pbmdAY2FyaW5naGVhcnR6LmNvbSIsImlkcCI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzA1NGU4YjQwLWYxYjUtNDY2YS1hMDg0LTdlNmIwNjg1MDExNi8iLCJpcGFkZHIiOiIzOS41OS4yMTAuMTcxIiwibmFtZSI6IlJ1c3NlbGwgTWFubmluZyIsIm9pZCI6ImY5MjdiOGVlLTU0YWYtNGRiMy1iOWZiLWEzMjgyMmJlZWExMiIsInBsYXRmIjoiMyIsInB1aWQiOiIxMDAzMDAwMEE4QkJERUE2Iiwic2NwIjoiQWxsU2l0ZXMuRnVsbENvbnRyb2wgQWxsU2l0ZXMuTWFuYWdlIEFsbFNpdGVzLlJlYWQgQWxsU2l0ZXMuV3JpdGUgQm9va2luZ3MuTWFuYWdlLkFsbCBCb29raW5ncy5SZWFkLkFsbCBCb29raW5ncy5SZWFkV3JpdGUuQWxsIEJvb2tpbmdzQXBwb2ludG1lbnQuUmVhZFdyaXRlLkFsbCBDYWxlbmRhcnMuUmVhZCBDYWxlbmRhcnMuUmVhZC5TaGFyZWQgQ2FsZW5kYXJzLlJlYWRXcml0ZSBDYWxlbmRhcnMuUmVhZFdyaXRlLlNoYXJlZCBDb250YWN0cy5SZWFkIENvbnRhY3RzLlJlYWQuU2hhcmVkIENvbnRhY3RzLlJlYWRXcml0ZSBDb250YWN0cy5SZWFkV3JpdGUuU2hhcmVkIERldmljZS5Db21tYW5kIERldmljZS5SZWFkIERldmljZU1hbmFnZW1lbnRBcHBzLlJlYWQuQWxsIERldmljZU1hbmFnZW1lbnRBcHBzLlJlYWRXcml0ZS5BbGwgRGV2aWNlTWFuYWdlbWVudENvbmZpZ3VyYXRpb24uUmVhZC5BbGwgRGV2aWNlTWFuYWdlbWVudENvbmZpZ3VyYXRpb24uUmVhZFdyaXRlLkFsbCBEZXZpY2VNYW5hZ2VtZW50TWFuYWdlZERldmljZXMuUHJpdmlsZWdlZE9wZXJhdGlvbnMuQWxsIERldmljZU1hbmFnZW1lbnRNYW5hZ2VkRGV2aWNlcy5SZWFkLkFsbCBEZXZpY2VNYW5hZ2VtZW50TWFuYWdlZERldmljZXMuUmVhZFdyaXRlLkFsbCBEZXZpY2VNYW5hZ2VtZW50UkJBQy5SZWFkLkFsbCBEZXZpY2VNYW5hZ2VtZW50UkJBQy5SZWFkV3JpdGUuQWxsIERldmljZU1hbmFnZW1lbnRTZXJ2aWNlQ29uZmlnLlJlYWQuQWxsIERldmljZU1hbmFnZW1lbnRTZXJ2aWNlQ29uZmlnLlJlYWRXcml0ZS5BbGwgRGlyZWN0b3J5LkFjY2Vzc0FzVXNlci5BbGwgRGlyZWN0b3J5LlJlYWQuQWxsIERpcmVjdG9yeS5SZWFkV3JpdGUuQWxsIEVBUy5BY2Nlc3NBc1VzZXIuQWxsIEVkdUFkbWluaXN0cmF0aW9uLlJlYWQgRWR1QWRtaW5pc3RyYXRpb24uUmVhZFdyaXRlIEVkdUFzc2lnbm1lbnRzLlJlYWQgRWR1QXNzaWdubWVudHMuUmVhZEJhc2ljIEVkdUFzc2lnbm1lbnRzLlJlYWRXcml0ZSBFZHVBc3NpZ25tZW50cy5SZWFkV3JpdGVCYXNpYyBFZHVSb3N0ZXIuUmVhZCBFZHVSb3N0ZXIuUmVhZEJhc2ljIEVkdVJvc3Rlci5SZWFkV3JpdGUgZW1haWwgRmlsZXMuUmVhZCBGaWxlcy5SZWFkLkFsbCBGaWxlcy5SZWFkLlNlbGVjdGVkIEZpbGVzLlJlYWRXcml0ZSBGaWxlcy5SZWFkV3JpdGUuQWxsIEZpbGVzLlJlYWRXcml0ZS5BcHBGb2xkZXIgRmlsZXMuUmVhZFdyaXRlLlNlbGVjdGVkIEZpbmFuY2lhbHMuUmVhZFdyaXRlLkFsbCBHcm91cC5SZWFkLkFsbCBHcm91cC5SZWFkV3JpdGUuQWxsIElkZW50aXR5UHJvdmlkZXIuUmVhZC5BbGwgSWRlbnRpdHlQcm92aWRlci5SZWFkV3JpdGUuQWxsIElkZW50aXR5Umlza0V2ZW50LlJlYWQuQWxsIE1haWwuUmVhZCBNYWlsLlJlYWQuU2hhcmVkIE1haWwuUmVhZFdyaXRlIE1haWwuUmVhZFdyaXRlLlNoYXJlZCBNYWlsLlNlbmQgTWFpbC5TZW5kLlNoYXJlZCBNYWlsYm94U2V0dGluZ3MuUmVhZCBNYWlsYm94U2V0dGluZ3MuUmVhZFdyaXRlIE1lbWJlci5SZWFkLkhpZGRlbiBNeUZpbGVzLlJlYWQgTXlGaWxlcy5Xcml0ZSBOb3Rlcy5DcmVhdGUgTm90ZXMuUmVhZCBOb3Rlcy5SZWFkLkFsbCBOb3Rlcy5SZWFkV3JpdGUgTm90ZXMuUmVhZFdyaXRlLkFsbCBOb3Rlcy5SZWFkV3JpdGUuQ3JlYXRlZEJ5QXBwIG9mZmxpbmVfYWNjZXNzIG9wZW5pZCBQZW9wbGUuUmVhZCBQZW9wbGUuUmVhZC5BbGwgcHJvZmlsZSBSZXBvcnRzLlJlYWQuQWxsIFNpdGVzLkZ1bGxDb250cm9sLkFsbCBTaXRlcy5NYW5hZ2UuQWxsIFNpdGVzLlJlYWQuQWxsIFNpdGVzLlJlYWRXcml0ZS5BbGwgU2l0ZXMuU2VhcmNoLkFsbCBUYXNrcy5SZWFkIFRhc2tzLlJlYWQuU2hhcmVkIFRhc2tzLlJlYWRXcml0ZSBUYXNrcy5SZWFkV3JpdGUuU2hhcmVkIFRlcm1TdG9yZS5SZWFkLkFsbCBUZXJtU3RvcmUuUmVhZFdyaXRlLkFsbCBVc2VyLkludml0ZS5BbGwgVXNlci5SZWFkIFVzZXIuUmVhZC5BbGwgVXNlci5SZWFkQmFzaWMuQWxsIFVzZXIuUmVhZFdyaXRlIFVzZXIuUmVhZFdyaXRlLkFsbCBVc2VyVGltZWxpbmVBY3Rpdml0eS5Xcml0ZS5DcmVhdGVkQnlBcHAiLCJzdWIiOiJFQWlYZnlnSTJNV2tDeVJFTE43WDJJdGJpd0J5YlV2dU1xTWhfMXVESlo4IiwidGlkIjoiMzczZDNkODItMDdiZi00MjZiLWE4ZDItNjdhOWIzZWUwNGE1IiwidW5pcXVlX25hbWUiOiJydXNzZWxsLm1hbm5pbmdAY2FyaW5naGVhcnR6LmNvbSIsInV0aSI6Ii14b29sWW1JUTB5bjZkaXFWWVFMQUEiLCJ2ZXIiOiIxLjAifQ.eUDL7Kn6NwFRk8vOYegoAPT4HSMW2zsjlrxBHGN2o1HUk7GldCbq3ket76eW6LKChNjKgilLktB13pdC-Us5tFrQIBTxbSYnSeKFy2Jtz1aUxMtqAxD2eXcZGjE44KqUf40agD_-eqMTmDy4vSbxUEvsacin8RlSwMd94cOuxrCz3eSpdWfpsJiqsd2tkg7i7EkA9hRE9xHEyVlQR8KLzyt1Zxvoh-RyCfzKqeEfhuBUcRdgdXxx2kgqrJI1Zv7NckslDs2dc4FcZ_JhgCFc0Hzmtqq9FrwQ-1IekMG2T8Gjkb-wzNu0qwKm3ZtMPReMKQkDu61Bx-00OKu02DFO3g  
    Content-Type: text/plain; 
    charset=utf-8  
    Content-Length: 32}
}

我们得到的回复是

StatusCode: 400, 
ReasonPhrase: 'Bad Request', 
Version: 1.1, 
Content: System.Net.Http.StreamContent, 
Headers:{  
    client-request-id: c0d1f2c4-e586-4094-9367-ed527dd28896  
    Strict-Transport-Security: max-age=31536000  
    request-id: c0d1f2c4-e586-4094-9367-ed527dd28896  
    Transfer-Encoding: chunked  
    x-ms-ags-diagnostic: {"ServerInfo":{"DataCenter":"SouthEast Asia","Slice":"SliceA","Ring":"3","ScaleUnit":"002","Host":"AGSFE_IN_10","ADSiteName":"SIN"}}  
    Duration: 2632.4966  
    Cache-Control: private  
    Date: Tue, 27 Mar 2018 12:23:49 GMT 
    Content-Type: application/json
    }

响应标题说

client-request-id: c0d1f2c4-e586-4094-9367-ed527dd28896
Strict-Transport-Security: max-age=31536000
request-id: c0d1f2c4-e586-4094-9367-ed527dd28896
Transfer-Encoding: chunked
x-ms-ags-diagnostic: {"ServerInfo":{"DataCenter":"SouthEast Asia","Slice":"SliceA","Ring":"3","ScaleUnit":"002","Host":"AGSFE_IN_10","ADSiteName":"SIN"}}
Duration: 2632.4966
Cache-Control: private
Date: Tue, 27 Mar 2018 12:23:49 GMT

知道我们在哪里丢失它?

1 个答案:

答案 0 :(得分:1)

您的问题是,您发出PATCH Content-Type txt\plain。它应该是application/json

您需要更改此行:

message.Content = new StringContent(addItemJsonString);

为:

message.Content = new StringContent(addItemJsonString, Encoding.UTF8, "application/json");