Отправка JSON в службу REST

Я пытаюсь использовать источник данных из Plex в облачной ERP-системе с отдыхом. Я получаю запрещенный код состояния при отправке PUT

Отправка JSON в службу REST

Отправка JSON в службу REST

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;
    }

Я не уверен, где он отскакивает от меня.

Это HttpContent httpBody = Body; выглядит странно. так как в string Put(string url,string Body,PCNModel pcn) этот параметр является string

Nkosi 05.03.2019 23:00

Я проверил ваш код на своем API, и авторизация работает правильно. Каково точное сообщение об ошибке? Может быть, этот глагол put не разрешен (или не разрешен)? Можете ли вы попробовать этот вызов с помощью curl или powershell?

bdn02 05.03.2019 23:36

@ 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.

David Chupp 06.03.2019 03:10

@Nkosi Я обновил его до этого: response = client.PostAsJsonAsync(url, Body).Result; Я получаю тот же результат, что и выше.

David Chupp 06.03.2019 03:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно разобрать тело в 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);
}
Ответ принят как подходящий

Выяснилось, что предоставленные мне учетные данные были неверны. Что помешало мне обрабатывать вызовы веб-служб на конечную точку.

Другие вопросы по теме