У меня есть общий метод SendRequest, который отправляет запрос на получение токена OAuth во время выполнения, а затем также использует его для отправки моего запроса на сервер. У меня есть несколько вызовов POST и DELETE, которые принимают тело списка или строку. Но я не знаю, как его установить. Я знаю, как отправить Json и сериализовать его, но у меня возникают проблемы с добавлением тела, когда это просто строка или тип списка.

  public HttpWebResponse SendRequest(string postData = "", Authentication.TokenType tokenType = Authentication.TokenType.Valid)
        {
            var messageBody = postData;
            var strResponseValue = string.Empty;

            var request = (HttpWebRequest)WebRequest.Create(EndPoint);
            if (EndPoint == StringBuilderUtil.GenerateRequestURL("token"))
            {
                request.ContentType = "application/x-www-form-urlencoded";
                request.Host = "identity-authority." + 
              ConfigurationManager.AppSettings["TestEnvironment"];
                Token = ConfigurationManager.AppSettings["GenericSpecialCode"];
            }
            else
            {
                request.ContentType = "application/json";
                Token = Authentication.ChooseToken(tokenType);
            }

            if (HttpMethod == HttpVerb.POST)
                request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");

            // Add some headers that are common to all calls.
            request.KeepAlive = true;
            request.Headers.Add("Authorization", AuthType.ToString() + " " + Token);
            request.Method = HttpMethod.ToString();
            request.Headers.Add("Cache-Control", "no-cache");

            var lbPostBuffer = Encoding.Default.GetBytes(messageBody);

            request.ContentLength = lbPostBuffer.Length;
            if (HttpMethod == HttpVerb.POST)
            {
                var PostStream = request.GetRequestStream();
                PostStream.Write(lbPostBuffer, 0, lbPostBuffer.Length);
                PostStream.Close();
            }

            return request.GetResponse() as HttpWebResponse;
        }

[![enter image description here][1]][1]


  [1]: https://i.stack.imgur.com/ec6hh.png
0
ABID KHAN 28 Апр 2020 в 02:21

1 ответ

как добавить тело, когда это просто строка или тип списка.

Если вы отправляете строку, вам не нужно ничего делать, кроме кодирования и помещения ее в поток.

Тип списка работает так же, как и объект. Вы должны сначала сериализовать его.

В последних двух вещах уже есть логика.

var lbPostBuffer = Encoding.Default.GetBytes(messageBody);

            request.ContentLength = lbPostBuffer.Length;
            if (HttpMethod == HttpVerb.POST)
            {
                var PostStream = request.GetRequestStream();
                PostStream.Write(lbPostBuffer, 0, lbPostBuffer.Length);
                PostStream.Close();
            }

Я предполагаю, что сериализация происходит до вызова метода SendRequest, и если вы используете Newtonsoft.Json, это можно сделать с помощью JsonConvert.SerializeObject

0
Józef Podlecki 28 Апр 2020 в 03:31
Данные моего тела представляют собой строку, иногда это список. Я отправляю его в виде строки в методе sendrequest, но он дает мне 400 неверных запросов.
 – 
ABID KHAN
28 Апр 2020 в 04:03
Указывает ли он какие-либо ошибки проверки в неправильном запросе? Это может быть что угодно
 – 
Józef Podlecki
28 Апр 2020 в 12:35