简体   繁体   中英

Updating SharePoint 2013 List Title Using REST and HttpClient

I am trying to update a SharePoint 2013 list title using the REST api and HttpClient. I have the following code but the StatusCode is returning BadRequest.

private async void UpdateTitle()
    {
        string webUrl = http://server;
        Uri uri = new Uri(webUrl + "/_api/web/lists/GetByTitle('Old')");
        //start replacement
        HttpClientHandler httpClientHandler = new HttpClientHandler();
        httpClientHandler.UseDefaultCredentials = true;
        HttpClient client = new HttpClient(httpClientHandler);
        client.DefaultRequestHeaders.Add("ContentType", "application/json;odata=verbose");
        string digest = await GetFormDigest("http://devsp13.dev.local/_api/contextinfo");
        client.DefaultRequestHeaders.Add("X-RequestDigest", digest);
        client.DefaultRequestHeaders.Add("X-HTTP-Method", "Merge");
        client.DefaultRequestHeaders.Add("IF-MATCH", "*");

        HttpContent content = new StringContent("{ '__metadata': { 'type': 'SP.List' }, 'Title': 'NewTitle' }");
        HttpResponseMessage response = await client.PostAsync(uri, content);
        response.EnsureSuccessStatusCode();}

I'm guessing I've missed something in forming the HttpClient but I'm struggling to see what. Any help is much appreciated.

Cheers,

Geoff

Try adding Accept to the HttpClient DefaultRequestHeaders and set the ContentType on the HttpContent Headers instead. This worked for me.

HttpClientHandler handler = new HttpClientHandler();
handler.UseDefaultCredentials = true;
HttpClient client = new HttpClient(handler);
client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
client.DefaultRequestHeaders.Add("X-RequestDigest", GetFormDigest());
client.DefaultRequestHeaders.Add("X-HTTP-Method", "MERGE");
client.DefaultRequestHeaders.Add("IF-MATCH", "*");

HttpContent content = new StringContent(metadataString);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
content.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("odata", "verbose"));
HttpResponseMessage response = await client.PostAsync(uri, content);
response.EnsureSuccessStatusCode();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM