如何在应用程序启动时获取请求URL

时间:2015-01-29 20:02:49

标签: asp.net-core asp.net-core-mvc

我正在尝试在我的Startup.cs文件中找到应用程序启动时的请求URL(特定于域)..

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

我需要在Startup.cs文件中使用它,因为它将确定稍后在启动类中,在ConfigureServices方法中添加的瞬态服务。

获取此信息的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

遗憾的是,您无法检索应用程序的托管URL,因为该位由IIS / WebListener等控制,并且不会直接流入应用程序。

现在一个不错的选择是为每个服务器提供一个ASPNET_ENV环境变量,然后将逻辑分开。以下是一些如何使用它的示例:

<强> Startup.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的另一个例子,我们想要进行类分离而不是方法分离:

<强> Startup.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.
    }
}

希望这有帮助。

答案 1 :(得分:2)

这不会为您提供域名,但如果您只是在端口上运行并且需要访问该域名,则可能会有所帮助:

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

如果你绑定了多个地址,不确定会发生什么。