Как получить URL-адрес запроса при запуске приложения

Я пытаюсь найти URL-адрес запроса (в частности, домен) при запуске приложения в моем запуске.cs файл..

public Startup(IHostingEnvironment env)
{
   Configuration = new Configuration().AddEnvironmentVariables();
   string url = "";
}

мне это нужно при запуске.cs-файл, потому что он определит, какие переходные службы добавляются позже в классе запуска, в методе ConfigureServices.

каков правильный способ получения этой информации?

2 ответов


к сожалению, вы не можете получить URL-адрес хостинга вашего приложения, так как этот бит контролируется IIS/WebListener и т. д. и не поступает непосредственно в приложение.

теперь хорошая альтернатива-предоставить каждому из ваших серверов ASPNET_ENV переменная окружения, чтобы затем отделить вашу логику. Вот несколько примеров того, как его использовать:

Автозагрузка.cs:

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        // Will only get called if there's no method that is named Configure{ASPNET_ENV}.
    }

    public void ConfigureDev(IApplicationBuilder app)
    {
        // Will get called when ASPNET_ENV=Dev
    }
}

вот еще один пример, когда ASPNET_ENV=Dev и мы хотим сделать разделение классов вместо разделения методов:

Автозагрузка.cs:

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        // Wont get called.
    }

    public void ConfigureDev(IApplicationBuilder app)
    {
        // Wont get called
    }
}

StartupDev.cs

public class StartupDev // Note the "Dev" suffix
{
    public void Configure(IApplicationBuilder app)
    {
        // Would only get called if ConfigureDev didn't exist.
    }

    public void ConfigureDev(IApplicationBuilder app)
    {
        // Will get called.
    }
}

надеюсь, что это помогает.


это не даст вам домен, но может помочь, если вы просто работаете на порту и вам нужен доступ к нему:

        var url = app.ServerFeatures.Get<Microsoft.AspNetCore.Hosting.Server.Features.IServerAddressesFeature>().Addresses.Single();

Не уверен, что произойдет, если у вас есть несколько адресов, связанных.