async Task <TResult> SendRequest <TRequest, TResult>(HttpMethod httpMethod, string additionalUrlPath, TRequest data, string endpointURL, WowzaQueryParams queryParams = null)
        {
            HttpResponseMessage response;

            using (var request = new HttpRequestMessage(httpMethod, $"{endpointURL}{additionalUrlPath}"))
            {
                request.BuildQueryParams(queryParams);
                request.AddWowzaRequestHeaders(Wowza.Apikey, $"{ApiSignaturePath}{EndPoint}{additionalUrlPath}", Wowza.UseBasicAuth);

                if (httpMethod != HttpMethod.Get && data != null)
                {
                    var jsonSerializer = new JsonSerializerSettings {
                        NullValueHandling = NullValueHandling.Ignore
                    };
                    request.Content = new StringContent(JsonConvert.SerializeObject(data, Formatting.Indented, jsonSerializer), Encoding.UTF8, "application/json");
                }
                response = await httpClient.SendAsync(request);
            }
            if (response != null && response.IsSuccessStatusCode)
            {
                var jsonContent = await response.Content.ReadAsStringAsync();

                if (!string.IsNullOrWhiteSpace(jsonContent))
                {
                    try
                    {
                        TResult result = await Task.Run(() => JsonConvert.DeserializeObject <TResult>(jsonContent));

                        return(result);
                    }
                    catch (Exception ex)
                    {
                        throw new WowzaException(ex.Message, ex.InnerException);
                    }
                }
                else
                {
                    return(default);