如何在WebApplicationFactory创建的Host上配置url?

5 asp.net-web-api asp.net-core

我想将下面代码中IHost创建的对象配置为在 https://localhost:5001 上运行。WebApp<TStartup>我怎么做?

理想情况下,我想从与启动文件相同的项目中的 launchsettings.json 读取此值。但是,如果我必须读取配置文件或硬编码,我就可以接受。

public class WebApp<TStartup> : WebApplicationFactory<TStartup> where TStartup : class
{
 
    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        builder.UseUrls("https://localhost:5001");  // does not work
        
        base.ConfigureWebHost(builder);
    }

    protected override IHost CreateHost(IHostBuilder builder)
    {
 
        builder
            .UseServiceProviderFactory(new AutofacServiceProviderFactory(containerBuilder =>
            {
 
            }));

        WebHost = builder.Build();
        WebHost.Start();
        return WebHost; //base.CreateHost(builder);
    }

    protected override IHostBuilder CreateHostBuilder()
    {
        return base.CreateHostBuilder();
    }
}
Run Code Online (Sandbox Code Playgroud)

测试治具:

[Test]
public async Task Test2()
{
    webapp = new WebApp<Startup>();                 // Startup is API server project
    HttpClient httpClient = webapp.CreateClient();
    
    string url = httpClient.BaseAddress.ToString(); 
    //line above returns http://localhost:80, desired is https://localhost:5001
   
    //...
}
Run Code Online (Sandbox Code Playgroud)

stu*_*tun 2

/sf/answers/5160519311/ 与我上面发布的传递命令行参数的答案类似,您可以这样做。

public class CustomWebApplicationFactory<TStartup>
    : WebApplicationFactory<TStartup> where TStartup : class
{
    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        // Notice there is no `--` prefix in "urls"
        builder.UseSetting("urls", "http://localhost:1234");

        // other stuff as usual
    }
}
Run Code Online (Sandbox Code Playgroud)