public async Task <string> GetRaw <TParameter, TResult>(RuneScapeApi <TParameter, TResult> api, TParameter parameter)
        {
            string uri = api.GetUri(parameter);

            string responseText;

            using (var response = await httpClient.GetAsync(uri))
            {
                if (response.StatusCode == HttpStatusCode.NotFound)
                {
                    responseText = null;
                }
                else
                {
                    response.EnsureSuccessStatusCode();
                    if (api.OverrideResponseEncoding != null)
                    {
                        using (var stream = await response.Content.ReadAsStreamAsync())
                            using (var reader = new StreamReader(stream, api.OverrideResponseEncoding))
                                responseText = await reader.ReadToEndAsync();
                    }
                    else
                    {
                        responseText = await response.Content.ReadAsStringAsync();
                    }
                }
            }

            return(responseText);
        }
        public async Task <TResult> Get <TParameter, TResult>(RuneScapeApi <TParameter, TResult> api, TParameter parameter)
        {
            string responseText = await GetRaw(api, parameter);

            return(api.ParseResult(parameter, responseText));
        }