Я бы рекомендовал использовать Fiddler для проверки запросов веб-службы REST SharePoint RESTfull.
В вашем случае конечная точка неверна. Поскольку вам необходимо запрашивать элементы списка с помощью запроса CAML, замените URL-адрес конечной точки следующим образом:
/_api/Web/lists/getbytitle('" + listName + "')/Items
к этому:
/_api/Web/lists/getbytitle('" + listName + "')/getitems
Во-вторых, заголовок application/atom+xml;type=entry
HTTP Content-Type
не поддерживается в запросах POST (см. список поддерживаемых типов MIME ниже). Итак, замените строки:
itemRequest.Accept = "application/atom+xml";
itemRequest.ContentType = "application/atom+xml;type=entry";
например, с этими:
itemRequest.Accept = "application/json";
itemRequest.ContentType = "application/json";
Вот и все.
Список поддерживаемых типов MIME
- приложение/json;odata=минимальные метаданные;потоковая передача=true
- приложение/json;odata=минимальные метаданные;потоковая передача=false
- приложение/json;odata=минимальные метаданные
- приложение / json; odata = полные метаданные; потоковая передача = true
- приложение / json; odata = полные метаданные; потоковая передача = ложь
- приложение / json; odata = полные метаданные
- приложение/json;odata=нометаданные;потоковое=true
- приложение / json; odata = нометаданные; потоковая передача = ложь
- приложение / json; odata = нометаданные
- приложение / json; потоковая передача = истина
- приложение/json; потоковая передача = ложь
- приложение / json; odata = подробный
- приложение/json
Вы также можете использовать следующий класс для выполнения запросов REST:
public class SPRestExecutor
{
public SPRestExecutor(Uri webUri,string accessToken)
{
WebUri = webUri;
AccessToken = accessToken;
}
public JObject ExecuteJsonWithDigest(string endpointUrl, HttpMethod method, IDictionary<string, string> headers, JObject payload)
{
var formDigestValue = RequestFormDigest();
var finalHeaders = new Dictionary<string, string>();
if (headers != null)
{
foreach (var key in headers.Keys)
{
finalHeaders.Add(key, headers[key]);
}
}
finalHeaders.Add("X-RequestDigest", formDigestValue);
var result = ExecuteJson(endpointUrl, method, finalHeaders, payload);
return result;
}
public JObject ExecuteJson(string endpointUrl, HttpMethod method, IDictionary<string, string> headers, JObject payload)
{
var request = (HttpWebRequest)WebRequest.Create(WebUri.ToString() + endpointUrl);
request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + AccessToken);
request.Method = method.Method;
request.Accept = "application/json;odata=verbose";
request.ContentType = "application/json;odata=verbose";
if (payload != null)
{
using (var writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(payload);
writer.Flush();
}
}
using (var response = (HttpWebResponse)request.GetResponse())
{
using(var responseStream = response.GetResponseStream())
{
using (var reader = new StreamReader(responseStream))
{
var result = reader.ReadToEnd();
return JObject.Parse(result);
}
}
}
}
/// <summary>
/// Request Form Digest
/// </summary>
/// <returns></returns>
protected string RequestFormDigest()
{
var result = ExecuteJson("/_api/contextinfo", HttpMethod.Post, null, null);
return result["d"]["GetContextWebInformation"]["FormDigestValue"].ToString();
}
public string AccessToken { get; private set; }
public Uri WebUri { get; private set; }
}
Суть
Применение
var client = new SPRestExecutor(webUri,accessToken);
var payload = JObject.Parse(@"{ 'query' : {'__metadata': { 'type': 'SP.CamlQuery' }, 'ViewXml': '<View><Query/></View>' } }");
var data = client.ExecuteJson("/_api/web/lists/getbytitle('Documents')/getitems", HttpMethod.Post, null, payload);
person
Vadim Gremyachev
schedule
09.02.2015