diff --git a/src/GitLabApiClient/FilesClient.cs b/src/GitLabApiClient/FilesClient.cs index 57e14f8c..048a4bd3 100644 --- a/src/GitLabApiClient/FilesClient.cs +++ b/src/GitLabApiClient/FilesClient.cs @@ -1,3 +1,4 @@ +using System; using System.Threading.Tasks; using GitLabApiClient.Internal.Http; using GitLabApiClient.Internal.Paths; @@ -16,5 +17,10 @@ public async Task GetAsync(ProjectId projectId, string filePath, string re { return await _httpFacade.Get($"projects/{projectId}/repository/files/{filePath.UrlEncode()}?ref={reference}"); } + + public async Task GetRawAsync(ProjectId projectId, string filePath, string reference = "master") + { + return await _httpFacade.GetString($"projects/{projectId}/repository/files/{filePath.UrlEncode()}/raw?ref={reference}"); + } } } diff --git a/src/GitLabApiClient/IFilesClient.cs b/src/GitLabApiClient/IFilesClient.cs index f848d759..b100a8f1 100644 --- a/src/GitLabApiClient/IFilesClient.cs +++ b/src/GitLabApiClient/IFilesClient.cs @@ -7,5 +7,6 @@ namespace GitLabApiClient public interface IFilesClient { Task GetAsync(ProjectId projectId, string filePath, string reference = "master"); + Task GetRawAsync(ProjectId projectId, string filePath, string reference = "master"); } } diff --git a/src/GitLabApiClient/Internal/Http/GitLabHttpFacade.cs b/src/GitLabApiClient/Internal/Http/GitLabHttpFacade.cs index b9b1fc8b..51448964 100644 --- a/src/GitLabApiClient/Internal/Http/GitLabHttpFacade.cs +++ b/src/GitLabApiClient/Internal/Http/GitLabHttpFacade.cs @@ -68,6 +68,9 @@ public Task> GetPagedList(string uri) => public Task Get(string uri) => _requestor.Get(uri); + public Task GetString(string uri) => + _requestor.GetString(uri); + public Task GetFile(string uri, string outputPath) => _requestor.GetFile(uri, outputPath); diff --git a/src/GitLabApiClient/Internal/Http/GitlabApiRequestor.cs b/src/GitLabApiClient/Internal/Http/GitlabApiRequestor.cs index c4d6947f..6ebbf7a5 100644 --- a/src/GitLabApiClient/Internal/Http/GitlabApiRequestor.cs +++ b/src/GitLabApiClient/Internal/Http/GitlabApiRequestor.cs @@ -28,6 +28,13 @@ public async Task Get(string url) return await ReadResponse(responseMessage); } + public async Task GetString(string url) + { + var responseMessage = await _client.GetAsync(url); + await EnsureSuccessStatusCode(responseMessage); + return await responseMessage.Content.ReadAsStringAsync(); + } + public async Task GetFile(string url, string outputPath) { var response = await _client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);