Beispiel #1
0
        /// <summary>
        /// Entirely handles request to table. This method will extract all needed data from ControllerContext. Not needed additional information.
        /// </summary>
        /// <param name="source">Source data set</param>
        /// <param name="context">Controller context</param>
        /// <returns>ActionResult that should be sent to client</returns>
        public ActionResult Handle(IQueryable <TSourceData> source, ControllerContext context)
        {
            try
            {
                PowerTableRequest request        = _queryHandler.ExtractRequest(context);
                ICommandHandler   commandHandler = ResolveCommandHandler(request.Command);

                if (!request.IsDeferred && commandHandler.IsDeferable)
                {
                    request.IsDeferred = true;
                    var token = TokenStorage.StoreRequest(request);
                    return(new ContentResult()
                    {
                        Content = TokenStorage.TokenPrefix + token, ContentEncoding = Encoding.UTF8, ContentType = "lattice/service"
                    });
                }
                var data = ProduceData(source, request);

                return(commandHandler.Handle(data, this));
            }
            catch (Exception ex)
            {
                return(ProduceError(ex));
            }
        }