Hi there,
I am upgrading my legacy asp.net web API 2 to Core 6. In my legacy application, I was calling a third-party web service as follows. It says it is obsolete and use HttpClient. How to convert this to HttpClient? Which HttpClient consumption pattern should I use? (are-you-using-httpclient-in-the-right-way) I was reading some settings from Web config, so should I read them from appsettings.json?
Thank you.
public static class EzPinApiCaller
{
public static async Task<HttpResponseMessage?> CallToken(string url)
{
//HTTPWebRequest DEV
var request = (HttpWebRequest)WebRequest.Create(WebConfigurationManager.AppSettings["EzPinService"] + url);
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
request.KeepAlive = false;
//Create a list of your parameters
var postParams = new List<KeyValuePair<string, string>>(){
new KeyValuePair<string, string>("client_id", WebConfigurationManager.AppSettings["ClientId"]) ,
new KeyValuePair<string, string>("secret_key", WebConfigurationManager.AppSettings["Secret"])
};
var keyValueContent = postParams;
var formUrlEncodedContent = new FormUrlEncodedContent(keyValueContent);
var urlEncodedString = await formUrlEncodedContent.ReadAsStringAsync();
using (var streamWriter = new StreamWriter(await request.GetRequestStreamAsync()))
{
await streamWriter.WriteAsync(urlEncodedString);
}
var httpResponse = (HttpWebResponse)(await request.GetResponseAsync());
var response = new HttpResponseMessage
{
StatusCode = httpResponse.StatusCode,
Content = new StreamContent(httpResponse.GetResponseStream()),
};
return response;
}
public static async Task<HttpResponseMessage> CallOrder(string url, string token, WatsonOrderRequest watsonOrderRequest)
{
HttpResponseMessage response = null;
try
{
//HTTPWebRequest DEV
var request = (HttpWebRequest)WebRequest.Create(WebConfigurationManager.AppSettings["EzPinService"] + url);
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
request.KeepAlive = false;
request.Headers.Add("Authorization", "Bearer " + token);
//Create a list of your parameters
var postParams = new List<KeyValuePair<string, string>>(){
new KeyValuePair<string, string>("sku", watsonOrderRequest.sku.ToString()) ,
new KeyValuePair<string, string>("quantity", watsonOrderRequest.quantity.ToString()),
new KeyValuePair<string, string>("pre_order", watsonOrderRequest.pre_order.ToString()),
new KeyValuePair<string, string>("price", watsonOrderRequest.price),
new KeyValuePair<string, string>("reference_code", watsonOrderRequest.reference_code.ToString())
};
var keyValueContent = postParams;
var formUrlEncodedContent = new FormUrlEncodedContent(keyValueContent);
var urlEncodedString = await formUrlEncodedContent.ReadAsStringAsync();
using (var streamWriter = new StreamWriter(await request.GetRequestStreamAsync()))
{
await streamWriter.WriteAsync(urlEncodedString);
}
var httpResponse = (HttpWebResponse)(await request.GetResponseAsync());
response = new HttpResponseMessage
{
StatusCode = httpResponse.StatusCode,
Content = new StreamContent(httpResponse.GetResponseStream()),
};
}
catch (WebException ex)
{
//Identify EZPIN error details
var resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
dynamic obj = JsonConvert.DeserializeObject(resp);
var detail = obj.detail;
var code = obj.code;
response = new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent(detail.ToString(), System.Text.Encoding.UTF8, "application/json") };
}
return response;
}
public static async Task<HttpResponseMessage> CallCards(string url, string token)
{
HttpResponseMessage response = null;
//HTTPWebRequest DEV
var request = (HttpWebRequest)WebRequest.Create(WebConfigurationManager.AppSettings["EzPinService"] + url);
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "GET";
request.KeepAlive = false;
request.Headers.Add("Authorization", "Bearer " + token);
var httpResponse = (HttpWebResponse)(await request.GetResponseAsync());
response = new HttpResponseMessage
{
StatusCode = httpResponse.StatusCode,
Content = new StreamContent(httpResponse.GetResponseStream()),
};
return response;
}
}