Как передать тело с моим запросом POST и DELETE с помощью Http Web Request - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть метод SendRequest Generi c, который отправляет запрос на получение токена 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

1 Ответ

0 голосов
/ 28 апреля 2020

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

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

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

Для последних двух вещей уже есть логика c.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...