/// <inheritdoc /> public virtual Task <IWebApiResponse> OnRequestAsync(MiddlewareContext context, Func <MiddlewareContext, CancellationToken, Task <IWebApiResponse> > callNext, CancellationToken cancellationToken = default) { if (context is null) { throw new ArgumentNullException(nameof(context)); } if (callNext is null) { throw new ArgumentNullException(nameof(callNext)); } return(ExecAsync()); async Task <IWebApiResponse> ExecAsync() { var httpResponse = await callNext(context, cancellationToken).ConfigureAwait(false); if (httpResponse == null) { return(null !); } if ((int)httpResponse.StatusCode >= 200 && (int)httpResponse.StatusCode <= 299) { return(httpResponse); } ErrorObject error; try { error = JsonSerializer.Deserialize <ErrorObject>(httpResponse.Content, deserializerOptions); } catch (JsonException) { // Fallback message throw new UnexpectedStatusException(context.Request, httpResponse, httpResponse.Content ?? string.Empty); } var errorResponse = new WebApiResponse <ErrorObject>(error, httpResponse.StatusCode, httpResponse.ResponseHeaders); throw httpResponse.StatusCode switch { HttpStatusCode.BadRequest => BadRequestException.CreateFromResponse(context.Request, errorResponse), HttpStatusCode.Unauthorized => AuthorizationRequiredException.CreateFromResponse(context.Request, errorResponse), HttpStatusCode.Forbidden => AuthorizationRequiredException.CreateFromResponse(context.Request, errorResponse), HttpStatusCode.NotFound => new NotFoundException(context.Request, errorResponse), #if NETSTANDARD (HttpStatusCode)429 => new TooManyRequestsException(context.Request, errorResponse), #else HttpStatusCode.TooManyRequests => new TooManyRequestsException(context.Request, errorResponse), #endif HttpStatusCode.InternalServerError => new ServerErrorException(context.Request, errorResponse), HttpStatusCode.ServiceUnavailable => new ServiceUnavailableException(context.Request, errorResponse), _ => new UnexpectedStatusException(context.Request, httpResponse, httpResponse.Content ?? string.Empty) }; } } }
public void SerializableTest() { var request = new HttpRequest(new Uri("http://localhost"), new Dictionary <string, string> { { "hello", "tyria" } }); var response = new HttpResponse <ErrorObject>(new ErrorObject { Text = "Error" }, HttpStatusCode.Forbidden, null, null); var error = AuthorizationError.MissingScopes; var exception = new AuthorizationRequiredException(request, response, error); exception.Should().BeBinarySerializable(); }
private bool ResolveCredentials(AuthorizationRequiredException e) { CredentialsWindow dlg = new CredentialsWindow { ConnectionProfile = e.ConnectionProfile, Owner = Application.Current.MainWindow }; var resolved = dlg.ShowDialog().GetValueOrDefault(false); if (resolved) { ConnectionService.Instance.SetCredentials(e.ConnectionProfile, dlg.Username, dlg.Password, e.Scheme, e.Domain); } return(resolved); }
static void foo(bool thrownull) { if (thrownull) { throw null; } #if !DEBUG var a = new AuthorizationRequiredException(); a.__AuthorizationUrl = "http://foo"; // Error 1 The type caught or thrown must be derived from System.Exception throw (Exception)(object)a; #endif }
public void ConstructorTest() { var request = Substitute.For <IWebApiRequest>(); var response = Substitute.For <IWebApiResponse <ErrorObject> >(); response.Content.Returns(new ErrorObject { Text = "Error" }); var error = AuthorizationError.MissingScopes; var exception = new AuthorizationRequiredException(request, response, error); Assert.Null(exception.InnerException); Assert.Same(request, exception.Request); Assert.Same(response, exception.Response); Assert.Equal(error, exception.AuthorizationError); }
public PendingAuthorizationData(AuthorizationRequiredException ex) { this.RequestID = ex.ResourceReference; this.Endpoint = ex.Endpoint; this.Message = "Authorization Pending"; }
public static Exception CreateWebException(AuthorizationRequiredException ex) { PendingAuthorizationData data = new PendingAuthorizationData(ex); return(new WebFaultException <PendingAuthorizationData>(data, HttpStatusCode.Accepted)); }
public static void ThrowAuthorizationRequired(AuthorizationRequiredException ex) { PendingAuthorizationData data = new PendingAuthorizationData(ex); throw new WebFaultException <PendingAuthorizationData>(data, HttpStatusCode.Accepted); }