示例#1
0
        private async Task <bool> DispatchToHandler <T, TKey>(HttpListenerContext context, object handler,
                                                              string httpMethod, SerializationToUse serializationToUse)
        {
            return(await Task.Run(async() =>
            {
                MethodInfo method = typeof(VerbRouteActioner).GetMethod("CreateVerbHandler",
                                                                        BindingFlags.NonPublic | BindingFlags.Instance);
                MethodInfo generic = method.MakeGenericMethod(new[] { typeof(T), typeof(TKey) });
                IVerbHandler <T, TKey> actualHandler =
                    (IVerbHandler <T, TKey>)generic.Invoke(this, new[] { handler });
                var result = false;


                switch (httpMethod)
                {
                case "GET":
                    result = await HandleGet <T, TKey>(actualHandler, context, serializationToUse);
                    break;

                case "PUT":
                    result = await HandlePut <T, TKey>(actualHandler, context, serializationToUse);
                    break;

                case "POST":
                    result = await HandlePost <T, TKey>(actualHandler, context, serializationToUse);
                    break;

                case "DELETE":
                    result = await HandleDelete <T, TKey>(actualHandler, context, serializationToUse);
                    break;
                }
                return result;
            }));
        }
示例#2
0
        private void HandleGenerate(GenerateOptions options)
        {
            container.RegisterInstance(options);
            container.RegisterInstance <Options>(options);
            IVerbHandler handler = container.Resolve <GenerateHandler>();

            handler.Run();
        }
示例#3
0
        private void HandleNew(NewOptions options)
        {
            container.RegisterInstance(options);
            container.RegisterInstance <Options>(options);
            IVerbHandler handler = container.Resolve <NewHandler>();

            handler.Run();
        }
示例#4
0
 private async Task <bool> HandleDelete <T, TKey>(IVerbHandler <T, TKey> actualHandler, HttpListenerContext context, SerializationToUse serializationToUse)
 {
     return(await Task.Run(async() =>
     {
         TKey id = await restMethodActioner.ExtractId <TKey>(context.Request);
         bool updatedOk = await actualHandler.Delete(id);
         updatedOk &= await restMethodActioner.SetOkResponse(context);
         return updatedOk;
     }));
 }
示例#5
0
 private async Task <bool> HandlePost <T, TKey>(IVerbHandler <T, TKey> actualHandler, HttpListenerContext context, SerializationToUse serializationToUse)
 {
     return(await Task.Run(async() =>
     {
         T item = await restMethodActioner.ExtractContent <T>(context.Request, serializationToUse);
         T itemAdded = await actualHandler.Post(item);
         bool result = await restMethodActioner.SetResponse <T>(context, itemAdded, serializationToUse);
         return result;
     }));
 }
示例#6
0
        private async Task <bool> HandleGet <T, TKey>(IVerbHandler <T, TKey> actualHandler,
                                                      HttpListenerContext context, SerializationToUse serializationToUse)
        {
            return(await Task.Run(async() =>
            {
                var result = false;
                if (restMethodActioner.IsGetAll(context.Request.RawUrl))
                {
                    var items = await actualHandler.Get();
                    result = await restMethodActioner.SetResponse <List <T> >(context, items.ToList(),
                                                                              serializationToUse);
                }
                else
                {
                    TKey id = await restMethodActioner.ExtractId <TKey>(context.Request);
                    var item = await actualHandler.Get(id);
                    result = await restMethodActioner.SetResponse <T>(context, item, serializationToUse);
                }

                return result;
            }));
        }
示例#7
0
        private void HandleNotParsed(IEnumerable <Error> errors)
        {
            IVerbHandler handler = container.Resolve <UnknownVerbHandler>();

            handler.Run();
        }