Ejemplo n.º 1
0
        public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            var result = context.Result as ObjectResult;

            if (FiltersHelper.IsResponseSuccesful(result))
            {
                PaginationModel <TEntity> paginationModel =
                    await FiltersHelper.GetParameterFromActionAsync <PaginationModel <TEntity> >(context);

                IQueryable <TDto> list = result.Value as IQueryable <TDto>;
                var dtoPagedList       = await list.ToPagedListAsync(paginationModel.PageSize, paginationModel.PageNumber);

                /// Doesn't support many pagination methods for a single controller
                var                paginationMethodInfo = filterConfiguration.ControllerInfoDictionary[context.Controller.GetType()].ControllerActions.Where(t => t.ResourceType == Attributes.ResourceType.Collection).FirstOrDefault();
                string             mediaType            = FiltersHelper.GetValueFromHeader(context, "Accept");
                PaginationMetadata paginationMetadata   = paginationHelperService.GeneratePaginationMetaData(dtoPagedList, paginationModel, context.Controller.GetType().Name, paginationMethodInfo.ActionName);
                if (filterConfiguration.SupportsCustomDataType && mediaType.Equals(filterConfiguration.CustomDataType, StringComparison.CurrentCultureIgnoreCase))
                {
                    var controllerType = context.Controller.GetType();
                    var dtoPagedListWithExternalLinks = HateoasHelper.CreateLinksForCollectionResource(dtoPagedList, filterConfiguration, paginationMetadata, context.Controller.GetType());
                    var shapedDtoPagedListWithLinks   = new EnvelopCollection <EnvelopDto <TDto> > {
                        Values = dtoPagedListWithExternalLinks.Values.Select(dto => {
                            return(HateoasHelper
                                   .CreateLinksForSingleResource(dto, filterConfiguration, linkGenerator, controllerType));
                        }), Links = dtoPagedListWithExternalLinks.Links
                    };
                    result.Value = shapedDtoPagedListWithLinks;
                }
                else
                {
                    result.Value = dtoPagedList;
                }
                await next();
            }
        }
Ejemplo n.º 2
0
        public void SetLinkPaging <T, U>(string routeName, PaggingResult <T> result, PaggingCriteria <U> pagging, HateoasMethodType method)
        {
            var link = HateoasHelper.CreateLink(Request, routeName, result, pagging, HateoasType.First, method);

            if (link != null)
            {
                result.Links.Add(link);
            }

            link = HateoasHelper.CreateLink(Request, routeName, result, pagging, HateoasType.Previous, method);
            if (link != null)
            {
                result.Links.Add(link);
            }

            link = HateoasHelper.CreateLink(Request, routeName, result, pagging, HateoasType.Next, method);
            if (link != null)
            {
                result.Links.Add(link);
            }

            link = HateoasHelper.CreateLink(Request, routeName, result, pagging, HateoasType.Last, method);
            if (link != null)
            {
                result.Links.Add(link);
            }
        }
Ejemplo n.º 3
0
 public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) {
     var result = context.Result as ObjectResult;
     if (FiltersHelper.IsResponseSuccesful(result)) {
         PaginationModel<TEntity> paginationModel = await FiltersHelper.GetParameterFromActionAsync<PaginationModel<TEntity>>(context);
         string controllerName = context.Controller.GetType().Name;
         IQueryable<TEntity> list = result.Value as IQueryable<TEntity>;
         var pagedList = await list.ToPagedListAsync(paginationModel.PageSize, paginationModel.PageNumber);
         var paginationMetadata = paginationHelperService.GeneratePaginationMetaData(pagedList, paginationModel, controllerName, "");
         HateoasHelper.AddPaginationHeaders(filterConfiguration, context, paginationMetadata);
         await next();
     }
 }
Ejemplo n.º 4
0
        private EnvelopCollection <EnvelopDto <TDto> > AddInternalAndExternalLinks(ResultExecutingContext context, PaginationMetadata paginationMetadata, IEnumerable <TDto> pagedList)
        {
            Type controllerType = context.Controller.GetType();
            EnvelopCollection <TDto> pagedListWithExternalLinks             = HateoasHelper.CreateLinksForCollectionResource(pagedList, filterConfiguration, paginationMetadata, context.Controller.GetType());
            EnvelopCollection <EnvelopDto <TDto> > shapedPagedListWithLinks = new EnvelopCollection <EnvelopDto <TDto> >
            {
                Values = pagedListWithExternalLinks.Values.Select(dto => {
                    return(HateoasHelper
                           .CreateLinksForSingleResource(dto, filterConfiguration, linkGenerator, controllerType));
                }),
                Links = pagedListWithExternalLinks.Links
            };

            return(shapedPagedListWithLinks);
        }
Ejemplo n.º 5
0
        public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            var result = context.Result as ObjectResult;

            if (FiltersHelper.IsResponseSuccesful(result))
            {
                TDto dto = result.Value as TDto;
                if (filterConfiguration.SupportsCustomDataType && FiltersHelper.GetValueFromHeader(context, "Accept").Equals(filterConfiguration.CustomDataType))
                {
                    var dtoWithLinks = HateoasHelper.CreateLinksForSingleResource(dto, filterConfiguration, linkGenerator, context.Controller.GetType());
                    var envelopDto   = new EnvelopDto <TDto>(
                        dto,
                        dtoWithLinks.Links);
                    result.Value = envelopDto;
                }
                else
                {
                    result.Value = dto;
                }
            }
            await next();
        }
Ejemplo n.º 6
0
 public LinkResult GetLinkItem(string routeName, object routeValues, HateoasMethodType method)
 {
     return(HateoasHelper.CreateLink(Request, routeName, routeValues, HateoasType.Item, true, method));
 }
Ejemplo n.º 7
0
 public LinkResult GetLinkCollection <T, U>(string routeName, PaggingResult <T> result, PaggingCriteria <U> pagging, HateoasMethodType method)
 {
     return(HateoasHelper.CreateLink(Request, routeName, result, pagging, HateoasType.Collection, method));
 }
Ejemplo n.º 8
0
 public LinkResult GetLinkSelf(string routeName, object routeValues, HateoasMethodType method)
 {
     return(HateoasHelper.CreateLink(Request, routeName, routeValues, HateoasType.Self, false, method));
 }