Как проверить перенаправление https в ASP.NET Core? - PullRequest
0 голосов
/ 21 сентября 2018

Недавно я выступил с модульными тестами для проверки некоторых правил перенаправления моего приложения ASP.NET Core 2.1:

[Fact(DisplayName = "lowercase path")]
public async Task LowercaseRedirect()
{
    var result = await this.Client.GetAsync("/BLOG/");
    Assert.EndsWith("/blog/", result.RequestMessage.RequestUri.PathAndQuery, StringComparison.InvariantCulture);
}

[Fact(DisplayName = "add missing slash")]
public async Task SlashRedirect()
{
    var result = await this.Client.GetAsync("/blog");
    Assert.EndsWith("/blog/", result.RequestMessage.RequestUri.PathAndQuery, StringComparison.InvariantCulture);
}

К вашему сведению: в настоящее время я вводлю WebApplicationFactory<TEntryPoint> в мой тестовый класс, который я использую для создания моего HttpClient.

Но теперь мне интересно, как проверить, работает ли перенаправление https.Есть идеи, как этого добиться?Заранее спасибо:)

1 Ответ

0 голосов
/ 24 сентября 2018

Для UseHttpsRedirection должен быть доступен порт для промежуточного программного обеспечения для перенаправления на HTTPS.Если порт недоступен, перенаправление на HTTPS не происходит.

Порт HTTPS можно указать с помощью любого из следующих параметров:

  • HttpsRedirectionOptions.HttpsPort
  • Переменная среды ASPNETCORE_HTTPS_PORT.
  • В разработкеURL-адрес HTTPS в файле launchsettings.json.
  • URL-адрес HTTPS, настроенный непосредственно на Kestrel или HttpSys.

Ссылка: UseHttpsRedirection

Чтобы проверить UseHttpsRedirection, укажите порт https.Вы можете выполнить следующие шаги:

  1. Сконфигурировать WebApplicationFactory с https_port

            public class UnitTest1 : IClassFixture<WebApplicationFactory<CoreHttps.Startup>>
    {
            private readonly WebApplicationFactory<CoreHttps.Startup> _factory;
    
    public UnitTest1(WebApplicationFactory<CoreHttps.Startup> factory)
    {
        _factory = factory.WithWebHostBuilder(builder => builder
            .UseStartup<Startup>()
            .UseSetting("https_port", "8080")); 
    }
    
  2. По умолчанию URL-адрес запроса http://localhost/, проверьте URL запроса, если клиент не перенаправил авто.

        [Theory]
    [InlineData("/Home")]
    public async Task HttpsRedirectionWithoutAutoRedirect(string url)
    {
        // Arrange
        var client = _factory.CreateClient(new WebApplicationFactoryClientOptions
                                {
                                    AllowAutoRedirect = false
                                });
        // Act
        var response = await client.GetAsync(url);
        // Assert
        Assert.Equal(HttpStatusCode.RedirectKeepVerb, response.StatusCode);
        Assert.StartsWith("http://localhost/",
            response.RequestMessage.RequestUri.AbsoluteUri);
    
        Assert.StartsWith("https://localhost:8080/",
            response.Headers.Location.OriginalString);
    }
    
  3. проверьте URL запроса, если запрос является автоматическим перенаправлением.

        [Theory]
    [InlineData("/Home")]
    public async Task HttpsRedirectionWithAutoRedirect(string url)
    {
        // Arrange
        var client = _factory.CreateClient();
        // Act
        var response = await client.GetAsync(url);
    
        // Assert
        Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        Assert.StartsWith("https://localhost:8080/",
            response.RequestMessage.RequestUri.AbsoluteUri);
    }
    
...