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