Ejemplo n.º 1
0
        public async Task <IActionResult> GetActorsAsync([FromQuery] ActorQueryParameters actorQueryParameters)
        {
            if (actorQueryParameters == null)
            {
                throw new ArgumentNullException(nameof(actorQueryParameters));
            }

            System.Collections.Generic.List <Middleware.Validation.ValidationError> list = actorQueryParameters.Validate();

            if (list.Count > 0)
            {
                Logger.LogWarning(
                    new EventId((int)HttpStatusCode.BadRequest, HttpStatusCode.BadRequest.ToString()),
                    nameof(GetActorsAsync),
                    "Invalid query string",
                    HttpContext);

                return(ResultHandler.CreateResult(list, Request.Path.ToString() + (Request.QueryString.HasValue ? Request.QueryString.Value : string.Empty)));
            }

            IActionResult res = await ResultHandler.Handle(dal.GetActorsAsync(actorQueryParameters), Logger).ConfigureAwait(false);

            // use cache dal on Cosmos 429 errors
            if (App.Cache && res is JsonResult jres && jres.StatusCode == 429)
            {
                res = await ResultHandler.Handle(App.CacheDal.GetActorsAsync(actorQueryParameters), Logger).ConfigureAwait(false);
            }

            return(res);
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> GetActorsAsync([FromQuery] ActorQueryParameters actorQueryParameters)
        {
            Logger.LogInformation(nameof(GetActorsAsync), "Web Request", HttpContext);

            if (actorQueryParameters == null)
            {
                throw new ArgumentNullException(nameof(actorQueryParameters));
            }

            List <Middleware.Validation.ValidationError> list = actorQueryParameters.Validate();

            if (list.Count > 0)
            {
                Logger.LogWarning(new EventId((int)HttpStatusCode.BadRequest, HttpStatusCode.BadRequest.ToString()), nameof(GetActorsAsync), "Invalid query string", HttpContext);

                return(ResultHandler.CreateResult(list, Request.Path.ToString() + (Request.QueryString.HasValue ? Request.QueryString.Value : string.Empty)));
            }

            return(await DataService.Read <List <Actor> >(Request).ConfigureAwait(false));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Handle an IActionResult request from a controller
        /// </summary>
        /// <typeparam name="T">type of result</typeparam>
        /// <param name="task">async task (usually the Cosmos query)</param>
        /// <param name="logger">NgsaLog</param>
        /// <returns>IActionResult</returns>
        public static async Task <IActionResult> Handle <T>(Task <T> task, NgsaLog logger)
        {
            // return exception if task is null
            if (task == null)
            {
                logger.LogError(new EventId((int)HttpStatusCode.InternalServerError, "Exception"), nameof(Handle), "Exception: task is null", ex: new ArgumentNullException(nameof(task)));

                return(CreateResult(logger.ErrorMessage, HttpStatusCode.InternalServerError));
            }

            try
            {
                // return an OK object result
                return(new OkObjectResult(await task.ConfigureAwait(false)));
            }
            catch (CosmosException ce)
            {
                // log and return Cosmos status code
                if (ce.StatusCode == HttpStatusCode.NotFound)
                {
                    logger.LogWarning(new EventId((int)ce.StatusCode, string.Empty), nameof(Handle), logger.NotFoundError);

                    return(CreateResult(logger.NotFoundError, ce.StatusCode));
                }

                logger.LogError(new EventId((int)ce.StatusCode, "CosmosException"), nameof(Handle), $"CosmosActivityId: {ce.ActivityId}", ex: ce);

                return(CreateResult(logger.ErrorMessage, ce.StatusCode));
            }
            catch (Exception ex)
            {
                // log and return exception
                logger.LogError(new EventId((int)HttpStatusCode.InternalServerError, "Exception"), nameof(Handle), "Exception: {ex.Message}", ex: ex);

                // return 500 error
                return(CreateResult("Internal Server Error", HttpStatusCode.InternalServerError));
            }
        }