【问题标题】:How to get the request URL on application startup如何在应用程序启动时获取请求 URL
【发布时间】:2015-03-29 04:49:49
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    遗憾的是,您无法检索应用程序的托管 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.
        }
    }
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回答。这很有帮助(尽管令人失望),但我决定为我的问题另辟蹊径。
    • 或坚持使用Configure 方法,只需使用旧的 if 语句检查 env.EnvironmentName 的值
    【解决方案2】:

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

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

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

    【讨论】:

    • 关于这一点,请记住,对于 Azure(我想不仅如此),检索的是本地信息,而不是外部可用域。
    • @Simon_Weaver 它在 asp.net core 2.xx 中不再起作用。努力以任何其他方式获取托管网址。我希望获得 kestra 或 IIS 的托管 url(即在 dev 上它将类似于 localhost:5000 和 prod 它将是我们设置的任何域,并且 IISIntegration 将设置该 url)
    • @Nexus23 我在核心方面做得很少,但是当我遇到这个问题时,我认为我必须“作弊”并在配置中输入外部域是什么,这样它就会读取配置本身。我敢肯定还有更聪明的方法。
    • @Simon_Weaver 你能分享一下这个作弊吗,如果现在可行的话,我可以忍受 :)
    • 这不行,总是一样的结果:Startup 127.0.0.1:XXX
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 2022-01-24
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多