コード例 #1
0
        public void TestUrlBuilderWithSchemeAndHostAndOptionalStringPathSegmentsTrue()
        {
            // Arrange
            var configuration = new UrlBuilderConfiguration
            {
                Scheme = Uri.UriSchemeHttps,
                Host   = "api.example.com"
            };

            var pathSegments = new[]
            {
                "articles",
                "42"
            };

            // Act
            var url = UrlBuilder.Create(configuration)
                      .Path(pathSegments, true)
                      .Build();

            this.Output.WriteLine(url);

            // Assert
            Assert.Equal("https://api.example.com/articles/42", url);
        }
コード例 #2
0
        // PRIVATE METHODS //////////////////////////////////////////////////
        #region Factory Methods
        private static IDocumentContextOptions CreateDocumentContextOptions(IServiceModel apiServiceModel,
                                                                            IHypermediaAssemblerRegistry apiHypermediaAssemblerRegistry,
                                                                            IOptions <ApiHypermediaOptions> apiHypermediaOptionsAccessor)
        {
            Contract.Requires(apiServiceModel != null);
            Contract.Requires(apiHypermediaOptionsAccessor != null);

            var options        = new DocumentContextOptions <DocumentContext>();
            var optionsBuilder = new DocumentContextOptionsBuilder(options);

            optionsBuilder.UseServiceModel(apiServiceModel);
            if (apiHypermediaAssemblerRegistry != null)
            {
                optionsBuilder.UseHypermediaAssemblerRegistry(apiHypermediaAssemblerRegistry);
            }

            var apiHypermediaOptions = apiHypermediaOptionsAccessor.Value;

            var scheme = apiHypermediaOptions.Scheme;
            var host   = apiHypermediaOptions.Host;
            var port   = apiHypermediaOptions.Port;
            var urlBuilderConfiguration = new UrlBuilderConfiguration(scheme, host, port);

            optionsBuilder.UseUrlBuilderConfiguration(urlBuilderConfiguration);

            return(options);
        }
コード例 #3
0
        private static Link CreatePlaylistResourceCollectionLink(UrlBuilderConfiguration urlBuilderConfiguration)
        {
            var playlistResourceCollectionLink = UrlBuilder.Create(urlBuilderConfiguration)
                                                 .Path(PlaylistResourceKeyWords.Self)
                                                 .Build();

            return(new Link(playlistResourceCollectionLink));
        }
コード例 #4
0
        private static Link CreateTrackResourceCollectionLink(UrlBuilderConfiguration urlBuilderConfiguration)
        {
            var trackResourceCollectionLink = UrlBuilder.Create(urlBuilderConfiguration)
                                              .Path(TrackResourceKeyWords.Self)
                                              .Build();

            return(new Link(trackResourceCollectionLink));
        }
コード例 #5
0
        private static Link CreateEmployeeResourceCollectionLink(UrlBuilderConfiguration urlBuilderConfiguration)
        {
            var employeeResourceCollectionLink = UrlBuilder.Create(urlBuilderConfiguration)
                                                 .Path(EmployeeResourceKeyWords.Self)
                                                 .Build();

            return(new Link(employeeResourceCollectionLink));
        }
コード例 #6
0
        private static Link CreateMediaTypeResourceCollectionLink(UrlBuilderConfiguration urlBuilderConfiguration)
        {
            var mediaTypeResourceCollectionLink = UrlBuilder.Create(urlBuilderConfiguration)
                                                  .Path(MediaTypeResourceKeyWords.Self)
                                                  .Build();

            return(new Link(mediaTypeResourceCollectionLink));
        }
コード例 #7
0
        private static Link CreateInvoiceResourceCollectionLink(UrlBuilderConfiguration urlBuilderConfiguration)
        {
            var invoiceResourceCollectionLink = UrlBuilder.Create(urlBuilderConfiguration)
                                                .Path(InvoiceResourceKeyWords.Self)
                                                .Build();

            return(new Link(invoiceResourceCollectionLink));
        }
コード例 #8
0
        private static Link CreateCustomerResourceCollectionLink(UrlBuilderConfiguration urlBuilderConfiguration)
        {
            var customersResourceCollectionLink = UrlBuilder.Create(urlBuilderConfiguration)
                                                  .Path(CustomerResourceKeyWords.Self)
                                                  .Build();

            return(new Link(customersResourceCollectionLink));
        }
        private static Link CreateCommentsResourceCollectionUrl(UrlBuilderConfiguration urlBuilderConfiguration)
        {
            var commentsResourceCollectionUrl = UrlBuilder.Create(urlBuilderConfiguration)
                                                .Path("comments")
                                                .Build();
            var commentsResourceCollectionLink = new Link(commentsResourceCollectionUrl);

            return(commentsResourceCollectionLink);
        }
コード例 #10
0
        private static UrlBuilderConfiguration CreateUrlBuilderConfiguration(Uri currentRequestUri)
        {
            var scheme = currentRequestUri.Scheme;
            var host   = currentRequestUri.Host;
            var port   = currentRequestUri.Port;
            var urlBuilderConfiguration = new UrlBuilderConfiguration(scheme, host, port);

            return(urlBuilderConfiguration);
        }
        private static Link CreatePeopleResourceCollectionUrl(UrlBuilderConfiguration urlBuilderConfiguration)
        {
            var peopleResourceCollectionUrl = UrlBuilder.Create(urlBuilderConfiguration)
                                              .Path("people")
                                              .Build();
            var peopleResourceCollectionLink = new Link(peopleResourceCollectionUrl);

            return(peopleResourceCollectionLink);
        }
        private static Link CreateArticlesResourceCollectionUrl(UrlBuilderConfiguration urlBuilderConfiguration)
        {
            var articlesResourceCollectionUrl = UrlBuilder.Create(urlBuilderConfiguration)
                                                .Path("articles")
                                                .Build();
            var articlesResourceCollectionLink = new Link(articlesResourceCollectionUrl);

            return(articlesResourceCollectionLink);
        }
        private static Link CreateBlogsResourceCollectionLink(UrlBuilderConfiguration urlBuilderConfiguration)
        {
            var blogsResourceCollectionUrl = UrlBuilder.Create(urlBuilderConfiguration)
                                             .Path("blogs")
                                             .Build();
            var blogResourceCollectionLink = new Link(blogsResourceCollectionUrl);

            return(blogResourceCollectionLink);
        }
コード例 #14
0
        public void TestUrlBuilderWithEmptyConfiguration()
        {
            // Arrange
            var configuration = new UrlBuilderConfiguration();

            // Act

            // Assert
            Assert.Throws <UriFormatException>(() => UrlBuilder.Create(configuration).Build());
        }
コード例 #15
0
        public Task <Document> GetHomeDocument()
        {
            var homeResource = new Home
            {
                Message = "Chinook Sample JSON:API Project"
            };

            var currentRequestUri = _httpContextAccessor.HttpContext.GetCurrentRequestUri();

            var scheme = currentRequestUri.Scheme;
            var host   = currentRequestUri.Host;
            var port   = currentRequestUri.Port;
            var urlBuilderConfiguration           = new UrlBuilderConfiguration(scheme, host, port);
            var customersResourceCollectionLink   = CreateCustomerResourceCollectionLink(urlBuilderConfiguration);
            var albumResourceCollectionLink       = CreateAlbumResourceCollectionLink(urlBuilderConfiguration);
            var artistResourceCollectionLink      = CreateArtistResourceCollectionLink(urlBuilderConfiguration);
            var employeeResourceCollectionLink    = CreateEmployeeResourceCollectionLink(urlBuilderConfiguration);
            var genreResourceCollectionLink       = CreateGenreResourceCollectionLink(urlBuilderConfiguration);
            var invoiceResourceCollectionLink     = CreateInvoiceResourceCollectionLink(urlBuilderConfiguration);
            var invoiceItemResourceCollectionLink = CreateInvoiceItemResourceCollectionLink(urlBuilderConfiguration);
            var mediaTypeResourceCollectionLink   = CreateMediaTypeResourceCollectionLink(urlBuilderConfiguration);
            var playlistResourceCollectionLink    = CreatePlaylistResourceCollectionLink(urlBuilderConfiguration);
            var trackResourceCollectionLink       = CreateTrackResourceCollectionLink(urlBuilderConfiguration);

            using var chinookDocumentContext = new ChinookJsonApiDocumentContext(currentRequestUri);
            var document = chinookDocumentContext
                           .NewDocument(currentRequestUri)
                           .SetJsonApiVersion(JsonApiVersion.Version10)
                           .Links()
                           .AddSelfLink()
                           .LinksEnd()
                           .Resource(homeResource)
                           .Links()
                           .AddLink(CustomerResourceKeyWords.Self, customersResourceCollectionLink)
                           .AddLink(AlbumResourceKeyWords.Self, albumResourceCollectionLink)
                           .AddLink(ArtistResourceKeyWords.Self, artistResourceCollectionLink)
                           .AddLink(EmployeeResourceKeyWords.Self, employeeResourceCollectionLink)
                           .AddLink(GenreResourceKeyWords.Self, genreResourceCollectionLink)
                           .AddLink(InvoiceResourceKeyWords.Self, invoiceResourceCollectionLink)
                           .AddLink(InvoiceItemResourceKeyWords.Self, invoiceItemResourceCollectionLink)
                           .AddLink(MediaTypeResourceKeyWords.Self, mediaTypeResourceCollectionLink)
                           .AddLink(PlaylistResourceKeyWords.Self, playlistResourceCollectionLink)
                           .AddLink(TrackResourceKeyWords.Self, trackResourceCollectionLink)
                           .LinksEnd()
                           .ResourceEnd()
                           .WriteDocument();

            _logger.LogInformation("Request for {URL} generated JSON:API document {doc}", currentRequestUri, document);
            return(Task.FromResult(document));
        }
        public Document GetAsync()
        {
            var apiEntryPoint = new ApiEntryPoint
            {
                Message = @"Entry point into the Blogging Hypermedia API powered by JsonApiFramework [Server]." + " " +
                          "Implements the JSON API 1.0 specification.",
                Version = "1.0"
            };

            /////////////////////////////////////////////////////
            // Build JSON API document
            /////////////////////////////////////////////////////
            var currentRequestUri = this.Request.GetUri();

            var scheme = currentRequestUri.Scheme;
            var host   = currentRequestUri.Host;
            var port   = currentRequestUri.Port;
            var urlBuilderConfiguration = new UrlBuilderConfiguration(scheme, host, port);

            var blogsResourceCollectionLink    = CreateBlogsResourceCollectionLink(urlBuilderConfiguration);
            var articlesResourceCollectionLink = CreateArticlesResourceCollectionUrl(urlBuilderConfiguration);
            var commentsResourceCollectionLink = CreateCommentsResourceCollectionUrl(urlBuilderConfiguration);
            var peopleResourceCollectionLink   = CreatePeopleResourceCollectionUrl(urlBuilderConfiguration);

            using (var documentContext = new BloggingDocumentContext(currentRequestUri))
            {
                var document = documentContext
                               .NewDocument(currentRequestUri)
                               .SetJsonApiVersion(JsonApiVersion.Version10)
                               .Links()
                               .AddSelfLink()
                               .LinksEnd()
                               .Resource(apiEntryPoint)
                               .Links()
                               .AddLink("blogs", blogsResourceCollectionLink)
                               .AddLink("articles", articlesResourceCollectionLink)
                               .AddLink("comments", commentsResourceCollectionLink)
                               .AddLink("people", peopleResourceCollectionLink)
                               .LinksEnd()
                               .ResourceEnd()
                               .WriteDocument();

                return(document);
            }
        }
コード例 #17
0
        public void TestUrlBuilderWithSchemeAndHost()
        {
            // Arrange
            var configuration = new UrlBuilderConfiguration
            {
                Scheme = Uri.UriSchemeHttps,
                Host   = "api.example.com"
            };

            // Act
            var url = UrlBuilder.Create(configuration)
                      .Build();

            this.Output.WriteLine(url);

            // Assert
            Assert.Equal("https://api.example.com", url);
        }
コード例 #18
0
        public void TestUrlBuilderWithSchemeAndHostAndPortAndStringPathSegment()
        {
            // Arrange
            var configuration = new UrlBuilderConfiguration
            {
                Scheme = Uri.UriSchemeHttps,
                Host   = "api.example.com",
                Port   = 443
            };

            // Act
            var url = UrlBuilder.Create(configuration)
                      .Path("articles")
                      .Build();

            this.Output.WriteLine(url);

            // Assert
            Assert.Equal("https://api.example.com:443/articles", url);
        }
コード例 #19
0
        public void TestUrlBuilderWithSchemeAndHostAndPortAndRootStringPathSegments()
        {
            // Arrange
            var configuration = new UrlBuilderConfiguration
            {
                Scheme           = Uri.UriSchemeHttps,
                Host             = "api.example.com",
                Port             = 443,
                RootPathSegments = new[] { "api", "en-us" }
            };

            // Act
            var url = UrlBuilder.Create(configuration)
                      .Build();

            this.Output.WriteLine(url);

            // Assert
            Assert.Equal("https://api.example.com:443/api/en-us", url);
        }
コード例 #20
0
 public OraChallengeDocumentContext(string host, int?port = null)
 {
     UrlBuilderConfiguration = new UrlBuilderConfiguration("http", host, port);
 }