예제 #1
0
        private async Task <bool> DispatchToHandler <T, TKey>(HttpListenerContext context, object handler,
                                                              string httpMethod, string url, SerializationToUse serializationToUse)
        {
            return(await Task.Run(async() =>
            {
                var result = false;

                DynamicMethodInfo method = null;
                switch (httpMethod)
                {
                case "GET":
                    method = await ObtainGetMethod <T, TKey>(handler, url);
                    result = await HandleGet <T, TKey>(method, handler, context, serializationToUse);
                    break;

                case "PUT":
                    method = await ObtainPutMethod <T, TKey>(handler, url);
                    result = await HandlePut <T, TKey>(method, handler, context, serializationToUse);
                    break;

                case "POST":
                    method = await ObtainPostMethod <T, TKey>(handler, url);
                    result = await HandlePost <T, TKey>(method, handler, context, serializationToUse);
                    break;

                case "DELETE":
                    method = await ObtainDeleteMethod <T, TKey>(handler, url);
                    result = await HandleDelete <T, TKey>(method, handler, context, serializationToUse);
                    break;
                }
                return result;
            }));
        }
예제 #2
0
        private async Task <bool> HandleDelete <T, TKey>(DynamicMethodInfo methodInfo, object handler,
                                                         HttpListenerContext context, SerializationToUse serializationToUse)
        {
            return(await Task.Run(async() =>
            {
                var updatedOk = false;
                TKey id = await restMethodActioner.ExtractId <TKey>(context.Request);

                if (methodInfo.IsTask)
                {
                    updatedOk = await(Task <bool>) methodInfo.Method.Invoke(handler, new object[] { id });
                }
                else
                {
                    updatedOk = (bool)methodInfo.Method.Invoke(handler, new object[] { id });
                }
                updatedOk &= await restMethodActioner.SetOkResponse(context);
                return updatedOk;
            }));
        }
예제 #3
0
        private async Task <bool> HandleGet <T, TKey>(DynamicMethodInfo methodInfo, object handler,
                                                      HttpListenerContext context, SerializationToUse serializationToUse)
        {
            return(await Task.Run(async() =>
            {
                var result = false;
                if (restMethodActioner.IsGetAll(context.Request.RawUrl))
                {
                    if (methodInfo.IsTask)
                    {
                        var items = await(Task <IEnumerable <T> >) methodInfo.Method.Invoke(handler, null);
                        result = await restMethodActioner.SetResponse <List <T> >(context,
                                                                                  items.ToList(), serializationToUse);
                    }
                    else
                    {
                        var items = (IEnumerable <T>)methodInfo.Method.Invoke(handler, null);
                        result = await restMethodActioner.SetResponse <List <T> >(context,
                                                                                  items.ToList(), serializationToUse);
                    }
                }
                else
                {
                    TKey id = await restMethodActioner.ExtractId <TKey>(context.Request);

                    if (methodInfo.IsTask)
                    {
                        var item = await(Task <T>) methodInfo.Method.Invoke(handler, new object[] { id });
                        result = await restMethodActioner.SetResponse <T>(context,
                                                                          item, serializationToUse);
                    }
                    else
                    {
                        var item = (T)methodInfo.Method.Invoke(handler, new object[] { id });
                        result = await restMethodActioner.SetResponse <T>(context,
                                                                          item, serializationToUse);
                    }
                }
                return result;
            }));
        }
예제 #4
0
        private async Task <bool> HandlePost <T, TKey>(DynamicMethodInfo methodInfo, object handler,
                                                       HttpListenerContext context, SerializationToUse serializationToUse)
        {
            return(await Task.Run(async() =>
            {
                T itemAdded = default(T);
                T item = await restMethodActioner.ExtractContent <T>(context.Request, serializationToUse);

                if (methodInfo.IsTask)
                {
                    itemAdded = await(Task <T>) methodInfo.Method.Invoke(handler, new object[] { item });
                }
                else
                {
                    itemAdded = (T)methodInfo.Method.Invoke(handler, new object[] { item });
                }

                bool result = await restMethodActioner.SetResponse <T>(context, itemAdded, serializationToUse);
                return result;
            }));
        }