Adityakumar2318 Ответов: 1

Я хочу использовать веб-клиента, а не с помощью HttpClient.


Этот приведенный ниже код работает нормально, я просто хотел сделать это с помощью webclient без асинхронности.

Или мы можем в любом случае удалить asnc из нижеприведенного метода и сделать его похожим на обычный метод.

// Вызов метода из program.cs с помощью консольного приложения

static void Main(string[] args)
      {
          AsyncCallbackUrlPost("f0c9b87f41fd0b7824ffdadeccefefefdd3c39929dbceca61b3450d497981a5eeeec354713d61263a71e3a953beebf62b12d6d9819ebb0593e7947766e8bef03", "http://localhost:54262/api/Payload");

          Console.ReadLine();
      }



// Этот метод я хочу заменить на webclient

public static async Task AsyncCallbackUrlPost(string loanBeamMessageHash, string callbackURL)
        {
            HttpResponseMessage httpResponseMessage = null;
            try
            {
                Uri objUri = new Uri(callbackURL);
                //Create an Http client and set the headers we want 
                HttpClient httpClient = new HttpClient();
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                //Add it to Response Header and call it "LoanBeam_MessageHash"
                httpClient.DefaultRequestHeaders.Add("LoanBeam_MessageHash", loanBeamMessageHash);
                httpClient.DefaultRequestHeaders.Host = objUri.Host;
                StringContent theContent = new StringContent(loanBeamMessageHash, System.Text.Encoding.UTF8, "application/json");
                //Post the data 
                httpResponseMessage = await httpClient.PostAsync(objUri, theContent);
                //handle status code 200
                if (httpResponseMessage.StatusCode == System.Net.HttpStatusCode.OK)
                {

                    Console.WriteLine("HTTP status success: " + httpResponseMessage.ReasonPhrase);
                    return;
                }
                else
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("HTTP status error: " + httpResponseMessage.ReasonPhrase);
            }

        }


Что я уже пробовал:

My above code is working fine, i just wanted to do it using webclient without async. 

Sinisa Hajnal

почему?

Richard Deeming

Если вы просто беспокоитесь о том, что программа будет завершена до завершения асинхронного вызова, то дождитесь завершения асинхронного вызова:

AsyncCallbackUrlPost("...", "...").GetAwaiter().GetResult();

Или, если вы нацелены на C# 7.1, вы можете сделать Main метод асинхронный:
http://pmichaels.net/2017/09/10/async-main-c-7-1/[^]

Adityakumar2318

Спасибо Ричарду за прекрасные советы. Не могли бы вы сообщить мне о своих недавних сомнениях?

Adityakumar2318

Я могу вернуть HttpStatusCode с помощью HttpClient? Могу ли я получить HttpStatusCode, например 200(OK), тоже используя WebClient?

Richard Deeming

httpResponseMessage.StatusCode
Это уже есть в вашем коде.

Использование низкоуровневого WebRequest / WebResponse классы, если вы бросаете ответ на HttpWebResponse тип, он имеет StatusCode собственность. Однако он имеет тенденцию выдавать исключение для чего-либо, кроме кода состояния успеха.

Для WebClient класс, код состояния вероятно содержаться в ResponseHeaders коллекция. Но опять же, он имеет тенденцию создавать исключение для чего-либо, кроме кода состояния успеха.

1 Ответов

Рейтинг:
2

F-ES Sitecore

Есть пример в документации WebClient.

Класс WebClient (System.Net)[^]


Adityakumar2318

Да, но он не показывает, как передать значение с помощью заголовка.

F-ES Sitecore

Пример действительно показывает, как добавлять заголовки.

Adityakumar2318

Спасибо. Но пример не показывает, как отправить значение json с помощью body.

F-ES Sitecore

JSON-это просто текст, в нем нет ничего особенного. Google "post data webclient", и вы найдете пример, который отправляет данные в теле, так что используйте его для отправки Вашего json.

Adityakumar2318

Спасибо. Моя проблема решена.

Adityakumar2318

Я могу вернуть HttpStatusCode с помощью HttpClient? Могу ли я получить HttpStatusCode, например 200(OK), тоже используя WebClient?