示例#1
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);
            }
        }
示例#2
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);
            }
        }