Ejemplo n.º 1
0
        private static Link CreateResourceRelationshipLink(IHypermediaContext hypermediaContext,
                                                           IResourcePathContext resourcePathContext,
                                                           IResourceType resourceType,
                                                           object clrResource,
                                                           bool addRelationshipsPathSegment,
                                                           IRelationshipInfo relationship,
                                                           Meta apiRelationshipLinkMeta)
        {
            Contract.Requires(hypermediaContext != null);
            Contract.Requires(resourcePathContext != null);
            Contract.Requires(resourceType != null);
            Contract.Requires(clrResource != null);
            Contract.Requires(relationship != null);

            var clrResourceType         = resourceType.ClrType;
            var urlBuilderConfiguration = hypermediaContext.GetUrlBuilderConfiguration(clrResourceType);

            var apiId           = resourceType.GetApiId(clrResource);
            var apiResourcePath = resourcePathContext.GetResourceSelfPath(apiId);
            var apiRelationshipRelPathSegment = relationship.ApiRelPathSegment;
            var apiRelationshipLinkHRef       = UrlBuilder.Create(urlBuilderConfiguration)
                                                .Path(apiResourcePath)
                                                .Path(Keywords.Relationships, addRelationshipsPathSegment)
                                                .Path(apiRelationshipRelPathSegment)
                                                .Build();
            var apiRelationshipLink = new Link
            {
                HRef = apiRelationshipLinkHRef,
                Meta = apiRelationshipLinkMeta
            };

            return(apiRelationshipLink);
        }