SharePoint Rest API - httpclientC#

Место общения программистов C#
Ответить
Anonymous
 SharePoint Rest API - httpclient

Сообщение Anonymous »

В моей службе SharePoinTrest я могу позвонить, чтобы добавить папку в библиотеку следующим образом: < /p>

Код: Выделить всё

public async Task AddFolderAsync(string library, string folderName)
{
var _serverRelativeUrl = string.Join("/", new string[] { library, folderName });
var _type = "SP.Folder";
var kvPropertyValues = new List
{
new KeyValuePair(ServerRelativeUrl, _serverRelativeUrl)
};

string json = GetJsonMetadataStringByType(_type, kvPropertyValues);
// this returns: '{'__metadata': {'type': 'SP.Folder'},'ServerRelativeUrl':'TEST/'}'
const string urlTemplate = "{0}/_api/web/folders";
var restUrl = string.Format(urlTemplate, webUrl);

var endpoint = _authenticationManager.GetWebRequest(restUrl, HttpMethod.Post, null, false);

using Stream requestStream = endpoint.GetRequestStream();
using StreamWriter writer = new(requestStream);
{
writer.Write(json);
writer.Flush();
}

HttpWebResponse httpResponse = await GetResponse(endpoint);

// Further stuff to be done here...
}
, к вашему сведению, значение json выглядит так при вставке:

Код: Выделить всё

{'__metadata': {'type': 'SP.Folder'},'ServerRelativeUrl':'TEST/'}
< /code>
Это согласуется с инструкциями, найденными здесь:
изучать Microsoft - SharePoint Rest API < /p>
Это работает блестяще, GetWebRequest < / Код> Позвоните в заголовки и возвращает запрос, это работает все хорошо. Метод WebRequest выглядит следующим образом: < /p>
public HttpWebRequest GetWebRequest(string url, HttpMethod method, string xHttpMethod, bool noMetaData)
{
try
{
var accessToken = EnsureAccessTokenAsync(siteURI, user, password).GetAwaiter().GetResult();
var odata = noMetaData ? OData.NOMETADATA : OData.VERBOSE;
var endpointRequest = HttpWebRequest.CreateHttp(url);
endpointRequest.Method = method.ToString();

endpointRequest.Accept = $"application/json;odata={odata}";
endpointRequest.ContentType = $"application/json;odata={odata}";
endpointRequest.Headers.Add("Authorization", "Bearer " + accessToken);

if (!string.IsNullOrEmpty(xHttpMethod))
{
endpointRequest.Headers.Add("IF-MATCH", "*");
endpointRequest.Headers.Add("X-HTTP-Method", xHttpMethod.ToUpper());
}

return endpointRequest;
}
catch (System.Exception)
{

throw;
}
}
Но когда я пытаюсь выполнить этот же вызов через httpclient call I Получить «плохой запрос» возврат?
т.е. < /p>

Код: Выделить всё

var sc = new StringContent(json, Encoding.UTF8, MediaTypeNames.Application.Json);
var _httpResponse = await _authenticationManager.GetHttpResponseFromRequestWithBody(restUrl, HttpMethod.Post, sc, null);
Я собираю httpresponsemessage через два метода:

Код: Выделить всё

private HttpRequestMessage GetHttpRequestMessage(string url, HttpMethod method, string xHttpMethod, string odata)
{
var request = new HttpRequestMessage(method, url);

// Set Bearer accessToken
var accessToken = EnsureAccessTokenAsync(siteURI, user, password).GetAwaiter().GetResult();
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

// Set AcceptHeader
var acceptHeader = MediaTypeWithQualityHeaderValue.Parse($"application/json;odata={odata}");
request.Headers.Accept.Add(acceptHeader);

// IF-Match header
if (!string.IsNullOrEmpty(xHttpMethod))
{
// request.Headers.Add("IF-MATCH", "*");
request.Headers.IfMatch.Add(new EntityTagHeaderValue("*"));
request.Headers.Add("X-HTTP-Method", xHttpMethod.ToUpper());
}

return request;
}

public Task GetHttpResponseFromRequestWithBody(string url, HttpMethod method, HttpContent content, string xHttpMethod, string odata = OData.NOMETADATA)
{
var request = GetHttpRequestMessage(url, method, xHttpMethod, odata);
request.Content = content;
Debug.WriteLine(request.Content);

return httpClient.SendAsync(request);
}
Это работает v = для каждого вызова, где мне нужно «получить» информацию, но не для вызовов «Обновление/POT» или «post» по какой -то причине? < Br /> Если я сделаю это, ответ возвращается как «плохой запрос», несмотря на то, что он далеко, насколько я могу определить - идентичный вызов? < /p>
Can Can Кто -нибудь здесь помогает?

Подробнее здесь: https://stackoverflow.com/questions/794 ... httpclient
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»