示例#1
0
        protected override Task HandleRequirementAsync(LinksHandlerContext context, ApiRootLinkRequirement requirement)
        {
            var route = context.RouteMap.GetRoute("ApiRoot"); // Assumes your controller has a named route "ApiRoot".

            context.Links.Add(new LinkSpec(requirement.Id, route));
            context.Handled(requirement);
            return(Task.CompletedTask);
        }
        protected override Task HandleRequirementAsync(LinksHandlerContext context, TestRequirement <TResource> requirement)
        {
            var route = context.RouteMap.GetRoute("TestRoute");

            context.Links.Add(new LinkSpec("testLink", route));
            context.Handled(requirement);
            return(Task.CompletedTask);
        }
示例#3
0
        protected override Task HandleRequirementAsync(LinksHandlerContext context, SelfLinkRequirement <TResource> requirement)
        {
            var route  = context.CurrentRoute;
            var values = context.CurrentRouteValues;

            context.Links.Add(new LinkSpec(requirement.Id, route, values));
            context.Handled(requirement);
            return(Task.FromResult(true));
        }
 public async Task HandleAsync(LinksHandlerContext context)
 {
     foreach (var handler in context.Requirements.OfType <ILinksHandler>())
     {
         if (context.PendingRequirements.Contains((ILinksRequirement)handler))
         {
             await handler.HandleAsync(context);
         }
     }
 }
        protected override async Task HandleRequirementAsync(LinksHandlerContext context, PagingLinksRequirement <TResource> requirement)
        {
            var condition = requirement.Condition;

            if (!context.AssertAll(condition))
            {
                context.Skipped(requirement, LinkRequirementSkipReason.Assertion);
                return;
            }

            var pagingResource = context.Resource as IPagedLinkContainer;

            if (pagingResource == null)
            {
                throw new InvalidOperationException($"PagingLinkRequirement can only be used by a resource of type IPageLinkContainer. Type: {context.Resource.GetType().FullName}");
            }

            var route       = context.CurrentRoute;
            var values      = context.CurrentRouteValues;
            var queryParams = context.CurrentQueryValues;

            if (condition != null && condition.RequiresAuthorization)
            {
                if (!await context.AuthorizeAsync(route, values, condition))
                {
                    context.Skipped(requirement, LinkRequirementSkipReason.Authorization);
                    return;
                }
            }

            context.Links.Add(new LinkSpec(requirement.CurrentId, route, GetPageValues(values, queryParams, pagingResource.PageNumber, pagingResource.PageSize)));

            var addPrevLink = ShouldAddPreviousPageLink(pagingResource.PageNumber);
            var addNextLink = ShouldAddNextPageLink(pagingResource.PageNumber, pagingResource.PageCount);

            if (addPrevLink)
            {
                context.Links.Add(new LinkSpec(requirement.PreviousId, route, GetPageValues(values, queryParams, pagingResource.PageNumber - 1, pagingResource.PageSize)));
            }
            if (addNextLink)
            {
                context.Links.Add(new LinkSpec(requirement.NextId, route, GetPageValues(values, queryParams, pagingResource.PageNumber + 1, pagingResource.PageSize)));
            }
            context.Handled(requirement);
            return;
        }
示例#6
0
        protected override async Task HandleRequirementAsync(LinksHandlerContext context, RouteLinkRequirement <TResource> requirement)
        {
            var condition = requirement.Condition;

            if (!context.AssertAll(condition))
            {
                context.Skipped(requirement, LinkRequirementSkipReason.Assertion);
                return;
            }
            if (String.IsNullOrEmpty(requirement.RouteName))
            {
                context.Skipped(requirement, LinkRequirementSkipReason.Error, $"Requirement did not have a RouteName specified for link: {requirement.Id}");
                return;
            }

            var route = context.RouteMap.GetRoute(requirement.RouteName);

            if (route == null)
            {
                context.Skipped(requirement, LinkRequirementSkipReason.Error, $"No route was found for route name: {requirement.RouteName}");
                return;
            }
            var values = new RouteValueDictionary();

            if (requirement.GetRouteValues != null)
            {
                values = requirement.GetRouteValues((TResource)context.Resource);
            }
            if (condition != null && condition.RequiresAuthorization)
            {
                if (!await context.AuthorizeAsync(route, values, condition))
                {
                    context.Skipped(requirement, LinkRequirementSkipReason.Authorization);
                    return;
                }
            }

            context.Links.Add(new LinkSpec(requirement.Id, route, values));
            context.Handled(requirement);
        }
 protected override Task HandleRequirementAsync(LinksHandlerContext context, TestRequirement <TResource> requirement)
 {
     throw new Exception("Test Exception");
 }