Пример #1
0
 public override Task <IActionResult> GetAll(UrlQueryParametersRequest urlQueryParametersRequest, SchoolsNullReadRequest specification = null)
 {
     return(Task.FromResult <IActionResult>(
                StatusCode(StatusCodes.Status405MethodNotAllowed,
                           ErrorTranslator
                           .GetErrorMessage("The allowed methods for this resource with the 'Test-Profile-Resource-WriteOnly' profile are PUT, POST, DELETE and OPTIONS."))));
 }
Пример #2
0
        public IHttpActionResult Get(string schema, string resource, [FromUri] UrlQueryParametersRequest urlQueryParametersRequest)
        {
            var queryParameter = new QueryParameters(urlQueryParametersRequest);

            var result = _getDeletedResourceIdsRepository.Execute(schema, resource, queryParameter);

            return(Json(result));
        }
Пример #3
0
        public virtual async Task <IHttpActionResult> GetAll(
            [FromUri] UrlQueryParametersRequest urlQueryParametersRequest,
            [FromUri] TGetByExampleRequest request = default(TGetByExampleRequest))
        {
            var defaultPageSizeLimit = defaultPageSizeLimitProvider.GetDefaultPageSizeLimit();

            //respond quickly to DOS style requests (should we catch these earlier?  e.g. attribute filter?)
            if (urlQueryParametersRequest.Limit != null &&
                (urlQueryParametersRequest.Limit <= 0 || urlQueryParametersRequest.Limit > defaultPageSizeLimit))
            {
                return(BadRequest($"Limit must be omitted or set to a value between 1 and max value defined in configuration file (defaultPageSizeLimit)."));
            }

            var internalRequestAsResource = new TResourceReadModel();
            var internalRequest           = internalRequestAsResource as TEntityInterface;

            if (request != null)
            {
                MapAll(request, internalRequest);
            }

            //TODO: Add support for If-None-Match; current implementation cannot verify value without going to the db
            // Read the incoming ETag header, if present
            TryGetRequestHeader("If-None-Match", out string etagValue);

            var queryParameters = new QueryParameters(urlQueryParametersRequest);

            // Execute the pipeline (synchronously)
            var result = await getManyPipeline.Value
                         .ProcessAsync(
                new GetManyContext <TResourceReadModel, TAggregateRoot>(internalRequestAsResource, queryParameters),
                new CancellationToken());

            // Handle exception result
            if (result.Exception != null)
            {
                Logger.Error("GetAllRequest", result.Exception);
                return(CreateActionResultFromException(result.Exception));
            }

            var response = Request.CreateResponse(HttpStatusCode.OK, result.Resources);

            // Return multiple results

            if (queryParameters.TotalCount)
            {
                response.Headers.Add("Total-Count", result.ResultMetadata.TotalCount.ToString());
            }

            return(new ResponseMessageResult(response).WithContentType(GetReadContentType()));
        }
        public virtual async Task <IActionResult> GetAll(
            [FromQuery] UrlQueryParametersRequest urlQueryParametersRequest,
            [FromQuery] TGetByExampleRequest request = default(TGetByExampleRequest))
        {
            //respond quickly to DOS style requests (should we catch these earlier?  e.g. attribute filter?)
            if (urlQueryParametersRequest.Limit != null &&
                (urlQueryParametersRequest.Limit < 0 || urlQueryParametersRequest.Limit > _defaultPageLimitSize))
            {
                return(BadRequest(
                           ErrorTranslator.GetErrorMessage(
                               "Limit must be omitted or set to a value between 1 and max value defined in configuration file (defaultPageSizeLimit).")));
            }

            var internalRequestAsResource = new TResourceReadModel();
            var internalRequest           = internalRequestAsResource as TEntityInterface;

            if (request != null)
            {
                MapAll(request, internalRequest);
            }

            //TODO: Add support for If-None-Match; current implementation cannot verify value without going to the db
            // Read the incoming ETag header, if present
            Request.TryGetRequestHeader(HeaderConstants.IfNoneMatch, out string etagValue);

            var queryParameters = new QueryParameters(urlQueryParametersRequest);

            // Execute the pipeline (synchronously)
            var result = await GetManyPipeline.Value
                         .ProcessAsync(
                new GetManyContext <TResourceReadModel, TAggregateRoot>(internalRequestAsResource, queryParameters),
                new CancellationToken());

            // Handle exception result
            if (result.Exception != null)
            {
                Logger.Error(GetAllRequest, result.Exception);
                return(CreateActionResultFromException(result.Exception));
            }

            // Return multiple results
            if (queryParameters.TotalCount)
            {
                Response.Headers.Add(HeaderConstants.TotalCount, result.ResultMetadata.TotalCount.ToString());
            }

            Response.GetTypedHeaders().ContentType = new MediaTypeHeaderValue(GetReadContentType());

            return(Ok(result.Resources));
        }
        public virtual async Task <IHttpActionResult> GetAll(
            [FromUri] UrlQueryParametersRequest urlQueryParametersRequest,
            [FromUri] TGetByExampleRequest request = default(TGetByExampleRequest))
        {
            short schoolYearFromRoute = Convert.ToInt16(RequestContext.RouteData.Values["schoolYearFromRoute"]);

            var v2RequestAsReadModel = new TResourceReadModel();

            MapAll(request, v2RequestAsReadModel as TEntityInterface);

            var v3RequestAsReadModel = MapV2ReadModelToV3ReadModel(v2RequestAsReadModel, schoolYearFromRoute);

            var upstreamQueryParams = MapReadModelToQueryParameters(v3RequestAsReadModel);

            var response = await UpstreamEdFiApiInvoker.Get(
                _v3TypeForV2Type.Value,
                Request.Headers,
                upstreamQueryParams,
                schoolYearFromRoute);

            if (response.Status == HttpStatusCode.OK)
            {
                IList v3Models = (IList)DeserializeFromV3Stream(response.ResponseStream, isCollection: true);

                var v2Models = new List <TResourceReadModel>();

                foreach (var v3Model in v3Models)
                {
                    var v2Model = WebApiApplication.Mapper.Map <TResourceReadModel>(
                        v3Model,
                        opts =>
                    {
                        opts.Items.Add("Invoker", UpstreamEdFiApiInvoker);
                        opts.Items.Add("Headers", Request.Headers);
                        opts.Items.Add("SchoolYear", schoolYearFromRoute);
                    });

                    v2Models.Add(v2Model);
                }

                return(Ok(v2Models));
            }


            var httpResponseMessage = CreateResponseMessage(response);

            return(new ResponseMessageResult(httpResponseMessage));
        }
Пример #6
0
        public async Task <IActionResult> GetAll([FromQuery] UrlQueryParametersRequest urlQueryParametersRequest)
        {
            if (!_isEnabled)
            {
                _logger.Debug($"{nameof(SnapshotsController)} was matched to handle the request, but the '{ApiFeature.ChangeQueries}' feature is disabled.");

                // Not Found
                return(new ObjectResult(null)
                {
                    StatusCode = (int)HttpStatusCode.NotFound,
                });
            }

            var snapshots = await _getSnapshots.GetAllAsync(new QueryParameters(urlQueryParametersRequest));

            return(Ok(snapshots));
        }
Пример #7
0
        public IActionResult Get(string schema, string resource, [FromQuery] UrlQueryParametersRequest urlQueryParametersRequest)
        {
            if (!_isEnabled)
            {
                _logger.Debug("ChangeQueries is not enabled.");
                return(NotFound());
            }
            var queryParameter = new QueryParameters(urlQueryParametersRequest);

            var result = _getDeletedResourceIdsRepository.Execute(schema, resource, queryParameter);

            // Explicitly serialize the response to remain backwards compatible with pre .net core
            return(new ContentResult
            {
                Content = JsonConvert.SerializeObject(result),
                ContentType = MediaTypeNames.Application.Json,
                StatusCode = StatusCodes.Status200OK
            });
        }
Пример #8
0
 public override Task <IHttpActionResult> GetAll(UrlQueryParametersRequest urlQueryParametersRequest, SchoolsNullReadRequest specification = null)
 {
     return(Task.FromResult(new StatusCodeResult(HttpStatusCode.MethodNotAllowed, this)
                            .WithError("The allowed methods for this resource with the 'Test-Profile-Resource-WriteOnly' profile are PUT, POST, DELETE and OPTIONS.")));
 }