Ejemplo n.º 1
0
        public async Task InvokeAsync(HttpContext context)
        {
            string path = context.Request.Path;
            string verb = context.Request.Method;

            var(contractType, pParams) = routingMapper.GetMatchingContractType(path, verb);

            if (contractType == null)
            {
                context.Response.StatusCode = (int)HttpStatusCode.NotFound;
                return;
            }
            var(handler, mInfo) = handlerFactory.ResolveHandler(contractType);
            if (handler == null)
            {
                context.Response.StatusCode = (int)HttpStatusCode.NotImplemented;
                return;
            }

            //connemt this out and it will jsut return without deserialize and reserialize.
            var contract = contractInitializer.Instantiate(contractType, pParams, context);

            Task runHandler() => (Task)(mInfo?.Invoke(handler, new[] { contract }));

            var TResult = GetTaskResultType(mInfo);

            if (TResult == null)
            {
                await AwaitNoResponse(runHandler);

                return;
            }
            var resp = await AwaitUnserializedResponse(runHandler, TResult);

            //context.Response.Headers["Content-Type"] = "application/json";
            context.Response.ContentType = "application/json";

            WriteResponseToStream(context, resp);
        }