Я хочу использовать веб-клиента, а не с помощью 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
коллекция. Но опять же, он имеет тенденцию создавать исключение для чего-либо, кроме кода состояния успеха.