示例#1
0
        void Run()
        {
            Router router = new Router();

            RestMethods restMethods = new RestMethods(VerifyToken);

            router.AddHandler("/login", HttpMethod.Post, HandleLogin);
            router.AddHandler("/logout", HttpMethod.Post, HandleLogout);

            router.AddHandler("/users", HttpMethod.Get,
                              (context) =>
            {
                SignEventAttendance(RestMethods.GetToken(context.Request));
                restMethods.PerformGet <User>(context, GetUsersByQuery);
            }
                              );
            router.AddHandler("/users/" + Router.IntegerUrlParameter, HttpMethod.Get,
                              (context) => restMethods.PerformGetById <User>(context, _users.TryGetValue,
                                                                             context.Request.Url.Segments[2])
                              );

            router.AddHandler("/messages", HttpMethod.Post,
                              (context) => restMethods.PerformPost <Message>(context, AddMessage)
                              );
            router.AddHandler("/messages", HttpMethod.Get,
                              (context) =>
            {
                SignEventAttendance(RestMethods.GetToken(context.Request));
                restMethods.PerformGet <Message>(context, GetMessagesByQuery);
            }
                              );
            router.AddHandler("/messages/" + Router.IntegerUrlParameter, HttpMethod.Get,
                              (context) => restMethods.PerformGetById <Message>(context, _messages.TryGetValue,
                                                                                context.Request.Url.Segments[2])
                              );
            router.AddHandler("/messages/" + Router.IntegerUrlParameter, HttpMethod.Delete,
                              (context) => restMethods.PerformDelete(context,
                                                                     DeleteMessage, context.Request.Url.Segments[2])
                              );

            using (HttpListener httpListener = new HttpListener())
            {
                httpListener.Prefixes.Add("http://localhost:" + _port + "/");
                httpListener.Start();

                while (true)
                {
                    var context = httpListener.GetContext();
                    HttpListenerRequest request = context.Request;
                    Thread t = new Thread(() =>
                    {
                        if (router.TryGetHandler(request, out HandlerFunc handler))
                        {
                            handler(context);
                        }
                        else
                        {
                            RestMethods.WriteError(context.Response, HttpStatusCode.BadRequest, "no handler provided");
                        }
                    });
                    t.Start();
                }
            }
        }