A fully free open source cross platform fluent APIClient for your .NET application
License
—
Deps
1
Install Size
—
Vulns
✓ 0
Published
Jun 23, 2023
$ dotnet add package Twileloop.JetAPI
An easy to use conveinent fluent API requester for all your personal or commercial .NET apps
Explore the docs »
Report A Bug
·
Request A Feature
var response = await new JetRequest<dynamic>()
.ExecuteAsync("https://jsonplaceholder.typicode.com/posts/1");var response = await new JetRequest<dynamic>()
.WithQueries(
new Param("postId", 2),
new Param("date", "1996-10-28")
)
.ExecuteAsync("https://jsonplaceholder.typicode.com/comments");```var response = await new JetRequest<dynamic>()
.WithQueries(
new Param("postId", 3)
)
.WithHeaders(
new Param("x-request-by", "name"),
new Param("x-limit", 150)
)
.ExecuteAsync("https://jsonplaceholder.typicode.com/comments"); .ExecuteAsync("https://jsonplaceholder.typicode.com/comments");```var jsonString = @"{""title"":""Foo"",""bar"":""Bar"",""userid"":1}";
var response = await new JetRequest<dynamic>()
.Post()
.WithBody(
new RawBody(ContentType.Json, jsonString)
)
.ExecuteAsync("https://jsonplaceholder.typicode.com/posts");var instance = new {
Title = "Foo",
Bar = "Bar",
UserId = 1
};
var response = await new JetRequest<MyResponseModel>()
.Put()
.WithBody(
new RawBody(ContentType.Json, instance)
)
.ExecuteAsync("https://jsonplaceholder.typicode.com/posts");var response = await new JetRequest<MyResponseModel>()
.Get()
.WithAuthentication(new BasicAuthentication {
Username = "username",
Password = "password"
})
.ExecuteAsync("https://jsonplaceholder.typicode.com/posts/5");var response = await new JetRequest<MyResponseModel>()
.Get()
.WithAuthentication(new BearerToken("<BEARER_TOKEN>"))
.ExecuteAsync("https://jsonplaceholder.typicode.com/posts/5");var response = await new JetRequest<MyResponseModel>()
.Get()
.WithAuthentication(new ApiKey("Api-Key", "<API_KEY>"))
.ExecuteAsync("https://jsonplaceholder.typicode.com/posts/5");var response = await new JetRequest<MyResponseModel>()
.Patch()
.HandleExceptions(
ex => Console.WriteLine($"An exception occured. Message: {ex.Message}");
)
.ExecuteAsync("htt://jsonplaceholder.typicode.com/posts/5");var response = await new JetRequest<MyResponseModel>()
.Get()
.WithCaptures(
successResponse => Console.WriteLine("Success");,
failureResponse => Console.WriteLine("Failure");
)
.ExecuteAsync("https://jsonplaceholder.typicode.com/posts/5");var response = await new JetRequest<MyResponseModel>()
.Put()
.WithCaptures(
(HttpStatusCode.OK, () => Console.WriteLine("Ok")),
(HttpStatusCode.NotFound, () => Console.WriteLine("Not Found")),
(HttpStatusCode.Unauthorized, () => Console.WriteLine("UnAuthorized")),
(HttpStatusCode.Forbidden, () => Console.WriteLine("Forbidden"))
)
.ExecuteAsync("https://jsonplaceholder.typicode.com/fake");var response = await new JetRequest<MyResponseModel>()
.Get()
.FetchAs(ContentType.XML)
.ExecuteAsync("https://samplexml.com/auth/demoxml.xml");var response = await new JetRequest<MyResponseModel>()
.WithCookies(
new Param("Cookie1", "<CookieValue1>"),
new Param("Cookie2", "<CookieValue2>")
)
.FetchAs(ContentType.HTML)
.ExecuteAsync("https://google.com");Create your own intercepter by inheriting from Interceptor base class
public class CustomInterceptor : Interceptor {
public override void OnInit() {
Console.WriteLine("Started...");
base.OnInit();
}
public override void OnRequesting(Request request) {
Console.WriteLine("Let's modify request from interceptor");
request.HttpClient.DefaultRequestHeaders.Add("Accept", "application/json");
Console.WriteLine("Enough. Now start requesting...");
base.OnRequesting(request);
}
public override void OnResponseReceived() {
Console.WriteLine("Got response...");
base.OnResponseReceived();
}
}Do your stuff above. Alter anything before request goes or log result after response came etc.. Now let's attach this interceptor to JetAPI
var interceptor = new CustomInterceptor();
var response = await new JetRequest<dynamic>()
.Post()
.WithAuthentication(new BearerToken("<BEARER_TOKEN>"))
.WithInterceptor(interceptor)
.ExecuteAsync("https://jsonplaceholder.typicode.com/posts/5");