Converting ordinary Http Post web request with Async and Await

后端 未结 3 1233
耶瑟儿~
耶瑟儿~ 2020-12-13 19:35

How I can convert my traditional HttpWebRequest \"POST\" call with Async / Await pattern, Here with this I am attaching my current code, Any one please help me to convert th

3条回答
  •  我在风中等你
    2020-12-13 20:16

    This should do the job:

        public async void GetEnvironmentVariables(Action getResultCallback, Action getErrorCallback) {
            CredentialsCallback = getResultCallback;
            ErrorCallback = getErrorCallback;
            var uri = new Uri(BaseUri);
            var request = (HttpWebRequest)WebRequest.Create(uri);
            request.Method = "POST";
            request.ContentType = "application/json";
    
            var jsonObject = new JObject {
                new JProperty("apiKey", _api),
                new JProperty("affiliateId", _affid),
            };
    
            var serializedResult = JsonConvert.SerializeObject(jsonObject);
            var requestBody = Encoding.UTF8.GetBytes(serializedResult);
    
            var requestStream = request.GetRequestStream();
            requestStream.Write(requestBody, 0, requestBody.Length);
    
            await GetResponse(request);
        }
    
        private async Task GetResponse(WebRequest request) {
            Stream resStream = null;
    
            try {
                var response = await request.GetResponseAsync();
    
                if (response == null) {
                    return;
                }
    
                resStream = response.GetResponseStream();
                if (resStream == null) {
                    return;
                }
    
                var reader = new StreamReader(resStream);
                var responseString = await reader.ReadToEndAsync();
                Credentails = JsonConvert.DeserializeObject(responseString);
                if (Credentails != null && string.IsNullOrEmpty(Credentails.Err)) {
                    CredentialsCallback(Credentails);
                }
                else {
                    if (Credentails != null) {
                        ErrorCallback(new Exception(string.Format("Error Code : {0}", StorageCredentails.Err)));
                    }
                }
            }
            catch (WebException we) {
                if (resStream != null) {
                    var reader = new StreamReader(resStream);
                    var responseString = reader.ReadToEnd();
                    Debug.WriteLine(responseString);
                }
                ErrorCallback(we);
            }
        }
    

提交回复
热议问题