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