Εγώ θα το έγγραφα κάπως έτσι:
public async Task<ResultObject> Test(string username, string password, string start_date, string status_id)
{
string apiPath = "booking/index?start_date={0}&status_id={1}";
string AuthenticationToken = string.Format("{0}:{1}", username, password);
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://demo.checkfront.com/api/3.0/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en-US"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes(AuthenticationToken)));
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, string.Format(apiPath, start_date, status_id));
try
{
HttpResponseMessage response = await client.SendAsync(req);
response.EnsureSuccessStatusCode();
string responseText = await response.Content.ReadAsStringAsync();
ResultObject result = JsonConvert.DeserializeObject<ResultObject>(responseText);
return result;
}
catch (HttpRequestException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
}
}
Το ResultObject είναι η κλάση του αντικειμένου που περιμένεις για απάντηση - υποθέτω ότι έιναι αντικείμενο, μπορεί να είναι κάτι άλλο. Τις παραμέτρους που περνάω στην μέθοδο τις καταλαβαίνεις.
Εγώ είμαι εγώ - δεν μου αρέσει το concatenation των strings, θέλω να είμαι safe από injection, θέλω η μέθοδός μου να είναι testable και πολλά άλλα παράξενα. Το τροποποιείς κατά βούλιση...
George J.