This library provides a declarative way of handling HTTP responses.
Responses can be dispatched based on status code, media type and link relation type.
machine.When(HttpStatusCode.OK, null, new MediaTypeHeaderValue("application/json"))
.Then(async (l, r) =>
{
var text = await r.Content.ReadAsStringAsync();
root = JToken.Parse(text);
});
Declarative parsers can be defined to map HttpContent to strongly typed objects
parserStore.AddMediaTypeParser<JToken>("application/json", async (content) =>
{
var stream = await content.ReadAsStreamAsync();
return JToken.Load(new JsonTextReader(new StreamReader(stream)));
});
// Define method to translate media type DOM into application domain object instance based on profile
parserStore.AddProfileParser<JToken, Person>(new Uri("http://example.org/person"), (jt) =>
{
var person = new Person();
var jobject = (JObject)jt;
person.FirstName = (string)jobject["FirstName"];
person.LastName = (string)jobject["LastName"];
return person;
});
var machine = new HttpResponseMachine(parserStore);
// Define action in HttpResponseMachine for all responses that return 200 OK and can be translated somehow to a Person
machine
.When(HttpStatusCode.OK)
.Then<Person>((m, l, p) => { testPerson = p; });