API SharePoint ListData.svc REST случайным образом возвращает ошибку: параметр «uriString» представляет абсолютный URI из HTTPClient - PullRequest
0 голосов
/ 22 октября 2019

У меня периодически возникает проблема с нашим REST API SharePoint 2010. У меня есть приложение .Net Core Console, которое выполняет серию вызовов к конечным точкам списка SharePoint, чтобы получить ответ JSON. Моя проблема заключается в том, что в случайное время ответ API является страницей ошибки:

Невозможно создать относительный URI, поскольку параметр 'uriString' представляет абсолютный URI. http://www.example.com/somefolder/file.svc

Есть ли проблема с моей конфигурацией HTTPClient? Есть ли параметр конфигурации, который я могу переключить в SharePoint, чтобы предотвратить ошибку или более надежно?

var uri = new Uri("http://www.example.com/");
var credential = new NetworkCredential("username", "password", "domain");
var credentialsCache = new CredentialCache { { uri, "NTLM", credential } };
var handler = new HttpClientHandler { Credentials = credentialsCache };
HttpClient Client = new HttpClient(handler);
Client.BaseAddress = new Uri("http://www.example.com/sharepoint/path/ListData.svc/");



// Make the list request
var result = await Client.GetAsync("MySharePointList");

1 Ответ

1 голос
/ 23 октября 2019

Чтобы получить элементы списка, URI API REST, как показано ниже.

http://sp2010/_vti_bin/ListData.svc/listname

Измените код, как показано ниже.

var siteUrl = "http://www.example.com/";
var listName = "MySharePointList";
var uri = new Uri(siteUrl);
var credential = new NetworkCredential("username", "password", "domain");
var credentialsCache = new CredentialCache { { uri, "NTLM", credential } };
var handler = new HttpClientHandler { Credentials = credentialsCache };
HttpClient client = new HttpClient(handler);

client.BaseAddress = new Uri(uri, "/_vti_bin/ListData.svc");       
client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
client.DefaultRequestHeaders.Add("ContentType", "application/json;odata=verbose");
var requestURL = siteUrl + "/_vti_bin/ListData.svc/" + listName;
// Make the list request
var result = client.GetAsync(requestURL).Result;
var items= result.Content.ReadAsStringAsync();
...