簡體   English   中英

如何在 ASP.NET Core 中測試 https 重定向?

[英]How do I test an https redirect in ASP.NET Core?

最近,我想出了單元測試來檢查我的 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 重定向是否有效。 任何想法如何做到這一點? 提前致謝 :)

對於UseHttpsRedirection ,必須有一個端口可供中間件重定向到 HTTPS。 如果沒有可用的端口,則不會重定向到 HTTPS。

可以通過以下任何設置指定 HTTPS 端口:

  • HttpsRedirectionOptions.HttpsPort
  • ASPNETCORE_HTTPS_PORT 環境變量。
  • 在開發中,launchsettings.json 中的 HTTPS url。
  • 直接在 Kestrel 或 HttpSys 上配置的 HTTPS url。

參考: UseHttpsRedirection

要測試UseHttpsRedirection ,請指定 https 端口。 您可以按照以下步驟操作:

  1. 使用https_port配置WebApplicationFactory

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM