Skip to content

Latest commit

 

History

History
41 lines (29 loc) · 1.57 KB

readme.md

File metadata and controls

41 lines (29 loc) · 1.57 KB

Tavis.HttpResponseMachine

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; });