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