コード例 #1
0
        public async Task RedirectGivenExtensionPresentAndIncluded()
        {
            var canonicalOptions = new CanonicalUrlOptions
            {
                PrimaryHost = new HostString("example.com"),
            };

            canonicalOptions.ExtensionsToInclude.Add(".jpg");

            var options = new RewriteOptions().AddRedirectToCanonicalUrl(canonicalOptions);

            var builder = new WebHostBuilder()
                          .Configure(app =>
            {
                app.UseRewriter(options);
            });

            using var server   = new TestServer(builder);
            server.BaseAddress = new Uri("http://something.com");
            var client   = server.CreateClient();
            var response = await client.GetAsync(new Uri($"{server.BaseAddress}foo.JPG")).ConfigureAwait(true);

            Assert.AreEqual(StatusCodes.Status301MovedPermanently, (int)response.StatusCode);
            Assert.AreEqual("http://example.com/foo.jpg", response.Headers.Location.OriginalString);
        }
コード例 #2
0
        public async Task MakeNoModifictionGivenPrimaryHostNameSpecifiedNotMatchingButIsAlternate()
        {
            var canonicalOptions = new CanonicalUrlOptions
            {
                PrimaryHost = new HostString("example.com"),
            };

            canonicalOptions.AlternateHosts.Add(new HostString("dev.example.com"));
            canonicalOptions.AlternateHosts.Add(new HostString("test.example.com"));
            canonicalOptions.AlternateHosts.Add(new HostString("stage.example.com"));

            var options = new RewriteOptions().AddRedirectToCanonicalUrl(canonicalOptions);
            var builder = new WebHostBuilder()
                          .Configure(app =>
            {
                app.UseRewriter(options);
            });

            using var server   = new TestServer(builder);
            server.BaseAddress = new Uri("http://test.example.com");
            var client   = server.CreateClient();
            var response = await client.GetAsync(new Uri($"{server.BaseAddress}foo")).ConfigureAwait(true);

            Assert.AreEqual(StatusCodes.Status404NotFound, (int)response.StatusCode);
        }
コード例 #3
0
        public async Task MakeNoModificationGivenForceRemoveTrailingSlashSetButNotPresent()
        {
            var canonicalOptions = new CanonicalUrlOptions()
            {
                TrailingSlash = TrailingSlashAction.Remove,
            };

            var options = new RewriteOptions().AddRedirectToCanonicalUrl(canonicalOptions);
            var builder = new WebHostBuilder()
                          .Configure(app =>
            {
                app.UseRewriter(options);
            });

            using var server   = new TestServer(builder);
            server.BaseAddress = new Uri("http://example.com");
            var client   = server.CreateClient();
            var response = await client.GetAsync(new Uri($"{server.BaseAddress}foobar")).ConfigureAwait(true);

            Assert.AreEqual(StatusCodes.Status404NotFound, (int)response.StatusCode);
        }
コード例 #4
0
        public async Task MakeNoModifictionGivenUrlIsLocalHost()
        {
            var canonicalOptions = new CanonicalUrlOptions
            {
                PrimaryHost = new HostString("example.com"),
            };

            var options = new RewriteOptions().AddRedirectToCanonicalUrl(canonicalOptions);
            var builder = new WebHostBuilder()
                          .Configure(app =>
            {
                app.UseRewriter(options);
            });

            using var server   = new TestServer(builder);
            server.BaseAddress = new Uri("http://localhost:12345");
            var client   = server.CreateClient();
            var response = await client.GetAsync(new Uri($"{server.BaseAddress}foo")).ConfigureAwait(true);

            Assert.AreEqual(StatusCodes.Status404NotFound, (int)response.StatusCode);
        }
コード例 #5
0
        public async Task MakeNoModificationGivenPathWithExtensionAndNotIncluded()
        {
            var canonicalOptions = new CanonicalUrlOptions
            {
                IsForcingLowercase = true,
            };

            var options = new RewriteOptions().AddRedirectToCanonicalUrl(canonicalOptions);
            var builder = new WebHostBuilder()
                          .Configure(app =>
            {
                app.UseRewriter(options);
            });

            using var server   = new TestServer(builder);
            server.BaseAddress = new Uri("http://something.com");
            var client   = server.CreateClient();
            var response = await client.GetAsync(new Uri($"{server.BaseAddress}FOo.jpg")).ConfigureAwait(true);

            Assert.AreEqual(StatusCodes.Status404NotFound, (int)response.StatusCode);
        }
コード例 #6
0
        public async Task RemoveTrailingSlashGivenForceRemoveTrailingSlashSet()
        {
            var canonicalOptions = new CanonicalUrlOptions
            {
                TrailingSlash = TrailingSlashAction.Remove,
            };
            var options = new RewriteOptions().AddRedirectToCanonicalUrl(canonicalOptions);

            var builder = new WebHostBuilder()
                          .Configure(app =>
            {
                app.UseRewriter(options);
            });

            using var server   = new TestServer(builder);
            server.BaseAddress = new Uri("http://example.com");
            var client   = server.CreateClient();
            var response = await client.GetAsync(new Uri($"{server.BaseAddress}foobar/")).ConfigureAwait(true);

            Assert.AreEqual(StatusCodes.Status301MovedPermanently, (int)response.StatusCode);
            Assert.AreEqual("http://example.com/foobar", response.Headers.Location.OriginalString);
        }
コード例 #7
0
        public async Task MakeNoModificationGivenNotApplyingToQuery()
        {
            var canonicalOptions = new CanonicalUrlOptions
            {
                PrimaryHost        = new HostString("something.com"),
                ShouldApplyToQuery = false,
            };

            var builder = new WebHostBuilder()
                          .Configure(app =>
            {
                var options = new RewriteOptions().AddRedirectToCanonicalUrl(canonicalOptions);
                app.UseRewriter(options);
            });

            using var server   = new TestServer(builder);
            server.BaseAddress = new Uri("http://something.com");
            var client   = server.CreateClient();
            var response = await client.GetAsync(new Uri($"{server.BaseAddress}foo?Lower=false")).ConfigureAwait(true);

            Assert.AreEqual(StatusCodes.Status404NotFound, (int)response.StatusCode);
        }
コード例 #8
0
        public async Task RedirectWithCustomResponseCodeGivenCustomResponseCodeSpecified()
        {
            var canonicalOptions = new CanonicalUrlOptions
            {
                StatusCode = StatusCodes.Status302Found,
            };

            var options = new RewriteOptions().AddRedirectToCanonicalUrl(canonicalOptions);

            var builder = new WebHostBuilder()
                          .Configure(app =>
            {
                app.UseRewriter(options);
            });

            using var server   = new TestServer(builder);
            server.BaseAddress = new Uri("http://example.com");
            var client   = server.CreateClient();
            var response = await client.GetAsync(new Uri($"{server.BaseAddress}fooBar")).ConfigureAwait(true);

            Assert.AreEqual(StatusCodes.Status302Found, (int)response.StatusCode);
            Assert.AreEqual("http://example.com/foobar", response.Headers.Location.OriginalString);
        }