Well, Actually you can‘t send real AJAX request using HttpClient
, but you can simulate it by adding XMLHttpRequest
to request header like this:
client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
Here is a Helper method which requires Microsoft.AspNet.WebApi.Client
nuget package:
private async TResponse CreateHttpRequestAsync<TRequest, TResponse>(Uri uri, TRequest request)
where TRequest : class
where TResponse : class, new()
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _bearerToken);
var response = await client.PostAsJsonAsync(uri, request);
if (response.StatusCode == HttpStatusCode.OK)
{
var json = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<TResponse>(json);
}
else if(response.StatusCode == HttpStatusCode.Unauthorized)
{
throw new UnauthorizedException();
}
else
{
throw new InvalidOperationException();
}
}
}