예제 #1
0
        public void TestWithDefault()
        {
            void ExpectedResponder(int response)
            {
            }

            var handler = RequestHandlerFactory <int, Action <int> > .CreateHandler(() => new Ctrlr(ExpectedResponder),
                                                                                    m => m.Method("get", q => q.Sync(p => p.Single("a", int.Parse), cf => cf().Method)), n => n);

            var uri       = new Uri("http://localhost?a=192");
            var responder = handler("get", uri, 543, _cts.Token).Result;

            responder(100);
            Assert.AreEqual((Action <int>)ExpectedResponder, responder);
        }
예제 #2
0
        public void TestHandleNonMultipart()
        {
            void ExpectedResponder(int response)
            {
            }

            var handler = RequestHandlerFactory <Stream, bool> .CreateHandler(() => new Ctrlr(ExpectedResponder),
                                                                              m => m.Method("get", q => q
                                                                                            .Sync(p => p
                                                                                                  .Context(FormUrlencodedDeserialize <SomeEntity>),
                                                                                                  cf => HandleSomeEntity)), n => n);

            var uri    = new Uri("http://localhost");
            var body   = "IntField=12&BoolField=true&StringField=asdf";
            var stream = GenerateStreamFromString(body);
            var result = handler("get", uri, stream, _cts.Token).Result;

            Assert.IsTrue(result);
        }
예제 #3
0
        public static void Main(string[] args)
        {
            var cts = new CancellationTokenSource();
            var c   = CreateContainer();

            var handler = RequestHandlerFactory <HttpListenerRequest, View> .CreateHandler(c.Resolve <HomeController>,
                                                                                           ms => ms
                                                                                           .Method(Mn.Get, qs => qs
                                                                                                   .Sync(ps => ps.Context(), cf => cf().EreIndex))
                                                                                           .Method(Mn.Get, qs => qs
                                                                                                   .Sync(ps => ps.Single("name"), cf => cf().EreIndex))
                                                                                           .Method(Mn.Get, qs => qs
                                                                                                   .Sync(ps => ps.Single("name", "default"), cf => cf().EreIndex))
                                                                                           .Method(Mn.Post, queries => queries
                                                                                                   .Sync(ps => ps.Context(DeserializeAsync <SimpleForm>), cp => cp().PostAnswer)),
                                                                                           rs0 => rs0
                                                                                           .Named("about", ms => ms
                                                                                                  .Method(Mn.Get, qs => qs
                                                                                                          .Sync(ps => ps, c.ResolveKeyed <Func <View> >("About"))),
                                                                                                  rs1 => rs1
                                                                                                  .Named("organization", ms => ms
                                                                                                         .Method(Mn.Get, qs => qs
                                                                                                                 .Sync(ps => ps, c.ResolveKeyed <Func <View> >("About"))),
                                                                                                         rs2 => rs2
                                                                                                         .Valued(int.Parse, c.Resolve <NewsController>, ms => ms
                                                                                                                 .Method(Mn.Get, qs => qs
                                                                                                                         .Sync(ps => ps.Multiple("order", bool.Parse)
                                                                                                                               .Custom(ParseInt), cp => cp().Index)))))
                                                                                           .Named("news", c.Resolve <NewsController>, ms => ms
                                                                                                  .Method(Mn.Get, qs => qs
                                                                                                          .Sync(ps => ps.Single("page", int.Parse, 0).Multiple("order", bool.Parse)
                                                                                                                .Custom(ParseInt), cp => cp().Index)),
                                                                                                  rs1 => rs1
                                                                                                  .Valued(int.Parse, ms => ms
                                                                                                          .Method(Mn.Get, qs => qs
                                                                                                                  .Sync(ps => ps, cp => cp().Get)))));

            new Server(handler)
            .RunAsync(cts.Token).Wait();
        }
예제 #4
0
        public void TestWithAlternative()
        {
            void ExpectedResponder(int response)
            {
            }

            var handler = RequestHandlerFactory <int, Action <int> > .CreateHandler(
                () => new Ctrlr(ExpectedResponder),
                m => m
                .Method("get", q => q
                        .Sync(p => p
                              .Single("s", s => s)
                              .Single("b", bool.Parse),
                              cf => new Ctrlr2(ExpectedResponder).Method)),
                n => n);

            var uri       = new Uri("http://localhost?s=asdfasdfasdf&b=true");
            var responder = handler("get", uri, 543, _cts.Token).Result;

            responder(100);
            Assert.AreEqual((Action <int>)ExpectedResponder, responder);
        }
예제 #5
0
        public void TestHandleJson()
        {
            void ExpectedResponder(int response)
            {
            }

            var handler = RequestHandlerFactory <Stream, bool> .CreateHandler(() => new Ctrlr(ExpectedResponder),
                                                                              m => m.Method("get", q => q
                                                                                            .Sync(p => p
                                                                                                  .Context(JsonDeserialize <SomeEntity>),
                                                                                                  cf => HandleSomeEntity)), n => n);

            var uri    = new Uri("http://localhost");
            var json   = @"{
    ""intField"": 12,
    ""boolField"": true,
    ""stringField"": ""asdf"",
}";
            var stream = GenerateStreamFromString(json);
            var result = handler("get", uri, stream, _cts.Token).Result;

            Assert.IsTrue(result);
        }