Мне трудно понять, почему я получаю сообщение об ошибке 403 при создании элемента списка с помощью httpclient.Я имею полный контроль над списком, и все же я получаю 403, и это очень расстраивает.Я прошел через очень много решений, но ни одно из них не помогло мне.
Если я создаю HTML-страницу с вызовами ajax к списку, я могу создавать элементы списка из браузера, но тот же код, написанный на c #выдает ошибку 403.
Вот мой тестовый код C #, который выдает 403 с ответом как
{"error":{"code":"-2130575251, Microsoft.SharePoint.SPException","message":{"lang":"en-US","value":"The security validation for this page is invalid and might be corrupted. Please use your web browser's Back button to try your operation again."}}}
NetworkCredential cred = new NetworkCredential(username, password);
HttpClient client = new HttpClient(new HttpClientHandler() { Credentials = cred })
{
BaseAddress = new Uri(URL)
};
string cmd = "_api/contextinfo";
client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
client.DefaultRequestHeaders.Add("ContentType", "application/json");
StringContent httpContent = new StringContent("");
var clientresponse = await client.PostAsync(cmd, httpContent);
if (clientresponse.IsSuccessStatusCode)
{
string formdigest = await clientresponse.Content.ReadAsStringAsync();
JToken t = JToken.Parse(formdigest);
string digest = t["d"]["GetContextWebInformation"]["FormDigestValue"].ToString();
string[] digestArray = digest.Split(',');
NetworkCredential cred2 = new NetworkCredential(username, password);
HttpClient client2 = new HttpClient(new HttpClientHandler() { Credentials = cred2 })
{
BaseAddress = new Uri(URL)
};
client2.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
client2.DefaultRequestHeaders.Add("ContentType", "application/json");
client2.DefaultRequestHeaders.Add("X-HTTP-Method", "POST");
client2.DefaultRequestHeaders.Add("X-RequestDigest", digestArray[0].ToString());
string path = SendShipments.ListPath + "_api/Web/Lists/getbytitle("Test")/items";
string content_Post = "{__metadata:{'type':'SP.Data.TestListItem'},Title:'Test'}";
var httpContent_Post = new StringContent(content_Post, Encoding.UTF8, "application/json");
var clientresponse2 = await client2.PostAsync(path, httpContent_Post);
Вот мой код ajax, который работает как ожидалось
<script>
$.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/GetByTitle('Test')/items",
type: "POST",
headers: {
"accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"content-Type": "application/json;odata=verbose"
},
data: "{__metadata:{'type':'SP.Data.TestListItem'},Title:'Test'}",
/*where Title is column name and you can add more columns by splitting with ,*/
success: function (data) {
console.log(data.d.results);
},
error: function (error) {
alert(JSON.stringify(error));
}
});
</script>
Я попытался добавить HttpContext.Current.Items["FormDigestValidated"] = true;
, но не сработало.
Пожалуйста, сообщите.Спасибо