- No build step
- Dynamic Service Proxy generator
- Support for Header as property
- Generic RequestBuilder
public interface IBackendService {
// when set, it will always be sent with
// every request
[Header("access-key")]
AccessKey { get; set; }
[Get("/location/{ip}")]
Task<IPInfo> GetLocationInfoAsync([Path("ip")] string ip);
[Post("/location/{ip}")]
Task<IPInfo> SaveLocationInfoAsync([Path("ip")] string ip, [Body] IPInfo info);
[Get("/voice/{id}.mp3")]
Task<byte[]> GetByteArrayAsync([Query("id")] string id);
// Response Object with Header
[Get("/projects")]
Task<GitLabResponse<GitLabProject>> GetProjectsAsync();
// Retrieve http response for detailed response.
// HttpResponseMessage is not disposed, it is responsibility of caller
// to dispose the message (which will close open network streams)
// This will not throw an error message if there was HTTP Error.
[Get("/video/{id}.mp4")]
Task<HttpResponseMessage> GetRawResponseAsync([Query("id")] string id);
// Multi Part Form for uploads...
[Post("/upload")]
Task<HttpResponseMessage> UploadFile(
// other form element items
[Multipart("name")] string attachmentName,
// it can accept stream
[MultipartFile("file1")] Stream fileStream,
// it can accept HttpContent which may contain content type
[MultipartFile("file2")] HttpContent someOtherContent
);
}
public class GitLabResponse<T>: ApiResponse<T[]> {
// set by RetroClient when response is received
[Header("x-total-pages")]
public int TotalPages {get;set;}
}
var client = RetroClient.Create<IBackendService, BaseService>( new Uri("base url...") , httpClient);
// get request
RequestBuilder.Get("/location/{ip}")
.Path("ip", ipAddress)
.GetResponseAsync<IPInfo>(httpClient);
// post request
RequestBuilder.Post("/location/{ip}")
.Path("ip", ipAddress)
.Body(info)
.GetResponseAsync<IPInfo>(httpClient);
// get raw response
RequestBuilder.Post("/location/{ip}")
.Path("ip", ipAddress)
.Body(info)
.GetResponseAsync(httpClient); // no generics
// Multipart Upload
RequestBuilder.Post("/upload")
.Multipart("name", attachmentName)
.MultipartFile("file1", fileStream, fileName: "photo.jpg")
.GetResponseAsync(httpClient);
// Get Api Response with Headers...
RequestBuilder.Post("/api/v4/projects/{id}")
.Path("id", projectId)
.GetResponseAsync<GitLabResponse<Project>>(httpClient);
public class GitLabResponse<T>: ApiResponse<T[]> {
// set by RetroClient when response is received
[Header("x-total-pages")]
public int TotalPages {get;set;}
}