public async Task <string> GetTokenAsync(string requestGuidString, string authCode) { if (_token == null || !_token.IsExpired) { throw new InvalidOperationException("A valid token has already been retrieved."); } if (!VerifyAuthRequest(requestGuidString)) { throw new ArgumentException("Invalid request guid."); } _guid = requestGuidString; HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, TOKEN_URI); Dictionary <string, string> values = new Dictionary <string, string> { { "grant_type", "authorization_code" }, { "code", authCode }, { "client_id", OAUTH_CLIENT_ID }, { "redirect_uri", REDIRECT_URI }, }; FormUrlEncodedContent content = new FormUrlEncodedContent(values); message.Content = content; HttpResponseMessage response = await _client.SendAsync(message); string responseString = await response.Content.ReadAsStringAsync(); if (responseString == null) { throw new InvalidResponseException("Empty response returned by token request."); } TokenResponse tokenResponse = JsonConvert.DeserializeObject <TokenResponse>(responseString); if (tokenResponse == null || tokenResponse.TokenType != TOKEN_TYPE) { throw new InvalidResponseException("Invalid response returned by token request."); } _token = new ExpirationWrapper <string>(tokenResponse.AccessToken, tokenResponse.ExpiresIn * 1000); _token.Expired += TokenExpiredHandler; _membershipId = tokenResponse.MembershipId; _clientMgr.AddApiClient(this); return(requestGuidString); }