示例#1
0
        private async Task <DataRequestResult <T> > SendGenericRequestAsync <T>(HttpMethod method, string endpoint, bool isAuthenticated)
        {
            try
            {
                HttpResponseMessage response;
                if (isAuthenticated)
                {
                    response = await retryWithAuthPolicy.ExecuteAsync(() =>
                    {
                        HttpRequestMessage request = new HttpRequestMessage(method, endpoint).AddToken(credentialService.Token);
                        return(client.SendAsync(request));
                    });
                }
                else
                {
                    HttpRequestMessage request = new HttpRequestMessage(method, endpoint);
                    response = await client.SendAsync(request);
                }
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    var result = await response.Content.ReadAsJsonObjectAsync <BackendResult <T> >();

                    return(new DataRequestResult <T>(result.Resource, result.Message));
                }
                else
                {
                    BackendRequestFailedException exception = new BackendRequestFailedException($"Request failed due to an unexpected response status {response.StatusCode}. Endpoint: {endpoint}.")
                    {
                        DisplayMessage = await GetBackendMessageAsync(response.Content)
                    };
                    throw exception;
                }
            }
            catch (Exception ex) when(ex is HttpRequestException || ex is TaskCanceledException)
            {
                throw GetDefaultException(endpoint, ex);
            }
        }
示例#2
0
        public async Task <DataRequestResult <UserPreferences> > SetRemoteSettingsAsync(UserPreferences preferences)
        {
            try
            {
                HttpResponseMessage response = await retryWithAuthPolicy.ExecuteAsync(() =>
                {
                    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "preferences").AddToken(credentialService.Token);
                    request.Content            = new JsonStringContent(preferences);
                    return(client.SendAsync(request));
                });

                if (response.IsSuccessStatusCode)
                {
                    var result = await response.Content.ReadAsJsonObjectAsync <BackendResult <UserPreferences> >();

                    return(new DataRequestResult <UserPreferences>(result.Resource, result.Message));
                }
                else
                {
                    BackendRequestFailedException exception;
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        exception = new BackendAuthenticationFailedException("Request failed due to incorrect credentials. Endpoint: preferencePost.");
                    }
                    else
                    {
                        exception = new BackendRequestFailedException($"Request failed due to an unexpected response status {response.StatusCode}. Endpoint: preferencePost.");
                    }
                    exception.DisplayMessage = await GetBackendMessageAsync(response.Content);

                    throw exception;
                }
            }
            catch (Exception ex) when(ex is HttpRequestException || ex is TaskCanceledException)
            {
                throw GetDefaultException($"preferencePost", ex);
            }
        }
示例#3
0
        public async Task <DataRequestResult <AccessToken> > SignInAsync(StudentCredential credential, bool createAccount = false)
        {
            _ = credential?.StudentId ?? throw new InvalidOperationException("User credential is not yet configured.");
            _ = credential?.PasswordHash ?? throw new InvalidOperationException("User credential is not yet configured.");

            try
            {
                HttpResponseMessage response = await client.PostAsync($"signIn/{createAccount}", new JsonStringContent(credential));

                if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Accepted)
                {
                    var result = await response.Content.ReadAsJsonObjectAsync <BackendResult <AccessToken> >();

                    credentialService.Token = result.Resource.Token;
                    return(new DataRequestResult <AccessToken>(result.Resource, result.Message));
                }
                else
                {
                    BackendRequestFailedException exception;
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        exception = new BackendAuthenticationFailedException("Request failed due to incorrect credentials. Endpoint: signIn.");
                    }
                    else
                    {
                        exception = new BackendRequestFailedException($"Request failed due to an unexpected response status {response.StatusCode}. Endpoint: signIn.");
                    }
                    exception.DisplayMessage = await GetBackendMessageAsync(response.Content);

                    throw exception;
                }
            }
            catch (Exception ex) when(ex is HttpRequestException || ex is TaskCanceledException)
            {
                throw GetDefaultException($"signIn", ex);
            }
        }