/// <summary> /// Send the given request to the given seafile server /// </summary> /// <param name="serverUri">The server address</param> /// <param name="request">The request to send</param> /// <param name="timeout">User-defined request timeout (if non null)</param> /// <returns>The response</returns> /// <exception cref="SeafException"></exception> public async Task <T> SendRequestAsync <T>(Uri serverUri, SeafRequest <T> request, TimeSpan?timeout) { if (client == null) { throw new InvalidOperationException("This SeafHttpConnection has already been closed."); } HttpRequestMessage requestMessage = CreateHttpRequestMessage(serverUri, request); HttpResponseMessage response; // when no custom timeout has been passed use the client's default timeout using (CancellationTokenSource cTokenSource = new CancellationTokenSource(timeout ?? client.Timeout)) { response = await client.SendAsync(requestMessage, cTokenSource.Token); } if (request.WasSuccessful(response)) { return(await request.ParseResponseAsync(response)); } else { throw GetSeafException(request, response); } }
public async Task <T> SendRequestAsync <T>(Uri serverUri, SeafRequest <T> request) { HttpRequestMessage requestMessage = CreateHttpRequestMessage(serverUri, request); HttpResponseMessage response; HttpClientHandler handler = new HttpClientHandler(); handler.AllowAutoRedirect = false; using (HttpClient client = new HttpClient(handler)) response = await client.SendAsync(requestMessage); if (request.WasSuccessful(response)) { return(await request.ParseResponseAsync(response)); } else { throw new SeafException(request.GetSeafError(response)); } }