Skip to content

Commit

Permalink
Merge pull request #101 from PatrykPlewaOfficial/fix/http-client-inst…
Browse files Browse the repository at this point in the history
…ance

fix: HttpRequestMessage instance per request
  • Loading branch information
innomaxx committed Feb 14, 2023
2 parents 040e8c1 + be1f074 commit 2383c79
Showing 1 changed file with 59 additions and 42 deletions.
101 changes: 59 additions & 42 deletions src/Crowdin.Api/CrowdinApiClient.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@


using System;
using System.Collections.Generic;
using System.IO;
Expand Down Expand Up @@ -180,69 +180,79 @@ public class CrowdinApiClient : ICrowdinApiClient

public Task<CrowdinApiResult> SendGetRequest(string subUrl, IDictionary<string, string>? queryParams = null)
{
var request = new HttpRequestMessage
Func<HttpRequestMessage> requestFn = () => new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri(FormRequestUrl(subUrl, queryParams))
};

return SendRequest(request);
return SendRequest(requestFn);
}

public Task<CrowdinApiResult> SendPostRequest(
string subUrl, object? body = null,
IDictionary<string, string>? extraHeaders = null)
{
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri(FormRequestUrl(subUrl))
};

if (body != null)
Func<HttpRequestMessage> requestFn = () =>
{
request.Content = CreateJsonContent(body);
}
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri(FormRequestUrl(subUrl))
};
if (extraHeaders != null && extraHeaders.Count > 0)
{
foreach (KeyValuePair<string, string> kvp in extraHeaders)
if (body != null)
{
request.Headers.Add(kvp.Key, kvp.Value);
request.Content = CreateJsonContent(body);
}
}
return SendRequest(request);
if (extraHeaders != null && extraHeaders.Count > 0)
{
foreach (KeyValuePair<string, string> kvp in extraHeaders)
{
request.Headers.Add(kvp.Key, kvp.Value);
}
}
return request;
};

return SendRequest(requestFn);
}

public Task<CrowdinApiResult> SendPutRequest(string subUrl, object? body = null)
{
var request = new HttpRequestMessage
Func<HttpRequestMessage> requestFn = () =>
{
Method = HttpMethod.Put,
RequestUri = new Uri(FormRequestUrl(subUrl))
};
var request = new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri = new Uri(FormRequestUrl(subUrl))
};
if (body != null)
{
request.Content = CreateJsonContent(body);
}
if (body != null)
{
request.Content = CreateJsonContent(body);
}
return SendRequest(request);
return request;
};

return SendRequest(requestFn);
}

public Task<CrowdinApiResult> SendPatchRequest(
string subUrl, IEnumerable<PatchEntry> body,
IDictionary<string, string>? queryParams = null)
{
var request = new HttpRequestMessage
Func<HttpRequestMessage> requestFn = () => new HttpRequestMessage
{
Method = new HttpMethod("PATCH"),
Content = CreateJsonContent(body),
RequestUri = new Uri(FormRequestUrl(subUrl, queryParams))
};

return SendRequest(request);
return SendRequest(requestFn);
}

public Task<HttpStatusCode> SendDeleteRequest(string subUrl, IDictionary<string, string>? queryParams = null)
Expand All @@ -252,27 +262,34 @@ public Task<HttpStatusCode> SendDeleteRequest(string subUrl, IDictionary<string,

public Task<CrowdinApiResult> SendDeleteRequest_FullResult(string subUrl, IDictionary<string, string>? queryParams = null)
{
var request = new HttpRequestMessage
Func<HttpRequestMessage> requestFn = () => new HttpRequestMessage
{
Method = HttpMethod.Delete,
RequestUri = new Uri(FormRequestUrl(subUrl, queryParams))
};

return SendRequest(request);
return SendRequest(requestFn);
}

public Task<CrowdinApiResult> UploadFile(string subUrl, string filename, Stream fileStream)
{
var request = new HttpRequestMessage
Func<HttpRequestMessage> requestFn = () =>
{
Method = HttpMethod.Post,
Content = new StreamContent(fileStream),
RequestUri = new Uri(FormRequestUrl(subUrl)),
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
Content = new StreamContent(fileStream),
RequestUri = new Uri(FormRequestUrl(subUrl)),
};
request.Headers.Add("Crowdin-API-FileName", filename);
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return request;
};
request.Headers.Add("Crowdin-API-FileName", filename);
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");


return SendRequest(request);
return SendRequest(requestFn);
}

public static async Task<T[]> WithFetchAll<T>(
Expand Down Expand Up @@ -308,14 +325,14 @@ public Task<CrowdinApiResult> UploadFile(string subUrl, string filename, Stream
return outResultList.ToArray();
}

private async Task<CrowdinApiResult> SendRequest(HttpRequestMessage request)
private async Task<CrowdinApiResult> SendRequest(Func<HttpRequestMessage> requestFn)
{
var result = new CrowdinApiResult();

HttpResponseMessage response =
_retryService != null
? await _retryService.ExecuteRequestAsync(() => _httpClient.SendAsync(request))
: await _httpClient.SendAsync(request);
? await _retryService.ExecuteRequestAsync(() => _httpClient.SendAsync(requestFn()))
: await _httpClient.SendAsync(requestFn());

await CheckDefaultPreconditionsAndErrors(response);
result.StatusCode = response.StatusCode;
Expand Down

0 comments on commit 2383c79

Please sign in to comment.