最近,我想到了单元测试来检查我的 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);
}
仅供引用:我目前正在注入(inject) WebApplicationFactory<TEntryPoint>
进入我的测试类,我用它来创建我的 HttpClient
.
但现在我很好奇如何检查 https 重定向是否正常工作。任何想法如何做到这一点?提前致谢:)
最佳答案
对于 UseHttpsRedirection
,必须有一个端口可供中间件重定向到 HTTPS。如果没有可用端口,则不会重定向到 HTTPS。
HTTPS 端口可以通过以下任何设置指定:
- HttpsRedirectionOptions.HttpsPort
- ASPNETCORE_HTTPS_PORT 环境变量。
- 在开发中,launchsettings.json 中的 HTTPS url。
- 直接在 Kestrel 或 HttpSys 上配置的 HTTPS 网址。
要测试 UseHttpsRedirection
,请指定 https 端口。您可以按照以下步骤操作:
使用
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")); }
默认情况下,请求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); }
如果请求是自动重定向,请检查请求 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); }
关于c# - 如何在 ASP.NET Core 中测试 https 重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52449718/