Я пытаюсь использовать источник данных из Plex в облачной ERP-системе с отдыхом. Я получаю запрещенный код состояния при отправке PUT
public static string Put(string url,string Body,PCNModel pcn)
{
HttpClient client = new HttpClient();
int timeOutSec = 90;
string accept = "application/json";
string acceptEncoding = "gzip, deflate";
string contentType = "application/json";
var credentials = pcn.UserName + ":" + pcn.Password;
var bytes = Encoding.UTF8.GetBytes(credentials);
var encodedCredentials = Convert.ToBase64String(bytes);
var authorizationHeaderValue = encodedCredentials;
HttpResponseMessage response = new HttpResponseMessage();
client.Timeout = new TimeSpan(0, 0, timeOutSec);
//client.DefaultRequestHeaders.Add("Accept", string.Format(accept));
client.DefaultRequestHeaders.Add("Accept", (accept));
client.DefaultRequestHeaders.Add("Accept-Encoding", string.Format(acceptEncoding));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType));
client.DefaultRequestHeaders.Add("Authorization", string.Format("Basic {0}", authorizationHeaderValue));
HttpContent httpBody = Body;
httpBody.Headers.ContentType = new MediaTypeHeaderValue(contentType);
response = client.PutAsync(url, httpBody).Result;
var error = response.StatusCode.ToString();
var requestMessage = response.RequestMessage;
var responseContent = response.Content;
var responseReasonPhrase = response.ReasonPhrase;
var responseHeader = response.Headers;
MessageBox.Show(error);
MessageBox.Show(requestMessage.ToString());
//MessageBox.Show(responseContent.ToString());
//MessageBox.Show(responseReasonPhrase.ToString());
//MessageBox.Show(responseHeader.ToString());
var content = response.Content.ReadAsStringAsync().Result;
return content;
}
Я не уверен, где он отскакивает от меня.
Я проверил ваш код на своем API, и авторизация работает правильно. Каково точное сообщение об ошибке? Может быть, этот глагол put не разрешен (или не разрешен)? Можете ли вы попробовать этот вызов с помощью curl или powershell?
@ bdn02 Я получаю результат: код состояния 403, ReasonPhrase: Forbidden, версия 1.1, содержимое: System.Net.Http.StreamContent, заголовки: { прагма: нет кеша, кеш-управление: нет кеша Дата: среда, 06 марта 2019 г. 02 :04:28 GMT Server: Microsoft-IIS/8.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.Net Content-Length:0 Срок действия: -1 } Я получаю тот же результат и в powershell.
@Nkosi Я обновил его до этого: response = client.PostAsJsonAsync(url, Body).Result; Я получаю тот же результат, что и выше.





Вам нужно разобрать тело в json, прежде чем вызывать PutAsync, вот небольшой код sinppet
client.DefaultRequestHeaders.Add("authKey", authKey);
var json = JsonConvert.SerializeObject(product, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PutAsync(url, content);
if (response.IsSuccessStatusCode)
{
}
else
{
var result = response.Content.ReadAsStringAsync().Result;
throw new Exception("Error Occured in Update Product" + result);
}
Выяснилось, что предоставленные мне учетные данные были неверны. Что помешало мне обрабатывать вызовы веб-служб на конечную точку.
Это
HttpContent httpBody = Body;выглядит странно. так как вstring Put(string url,string Body,PCNModel pcn)этот параметр являетсяstring