【问题标题】:Getting the Base URL of the application inside of the ASP.NET Core HostedService在 ASP.NET Core HostedService 中获取应用程序的基本 URL
【发布时间】:2018-11-26 17:33:47
【问题描述】:

我需要在其中一个 HostedServices 中获取 ASP.NET Core 应用程序的基本 URL。

我需要这个,因为它向托管它的同一个 ASP.NET 核心应用程序发出请求(目的是预热,以提高对用户的首次调用性能)。

目前我的解决方案是将基本 URL 保留在配置文件中或仅保留在托管服务私有变量中。

https://github.com/BBGONE/JRIApp.Core/blob/master/DEMOS/RIAppDemoMVC/RIAppDemo/Utils/WarmUpService.cs

不过我想,有办法从启动代码中获取,但不知道隐藏在哪里。

有人知道怎么获得吗?

附: - 有一些解决方案可以从请求信息中获取它,但是在完成任何请求之前启动 HostedService。所以不适合这种情况。

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    我找到了如何获取应用程序的地址。

    public void Configure(IApplicationBuilder application)
    {
        var addresses = application.ServerFeatures.Get<IServerAddressesFeature>().Addresses;
    }
    

    虽然它有一个问题https://github.com/aspnet/Hosting/issues/811,并且如果应用程序托管在 IIS 或 IIS Express 中,则无法使用。

    他们说:

    这不适用于 IIS 或 IIS Express。 IIS 作为 反向代理。它为您的进程选择一个随机端口来监听 并且不会将公共地址信息传递给您。唯一的办法 从传入的请求中获取公共地址信息。

    ASP.NET Core 模块生成一个动态端口以分配给后端进程。 CreateDefaultBuilder 调用 UseIISIntegration 方法。 UseIISIntegration 将 Kestrel 配置为侦听 localhost IP 地址 (127.0.0.1) 的动态端口。如果动态端口是 1234,Kestrel 会在 127.0.0.1:1234 进行侦听。此配置替代了其他提供的 URL 配置。

    但是如果你在构建后从 WebHost 获取功能,那么这可以用于获取本地地址以进行预热。

    我试过这样:

     public static void Main(string[] args)
     {
                var builder = CreateWebHostBuilder(args);
                var webHost = builder.Build();
                var addresses = webHost.ServerFeatures.Get<IServerAddressesFeature>().Addresses;
                var address = addresses.FirstOrDefault();
                AppDomain.CurrentDomain.SetData("BaseUrl", address?? "");
                webHost.Run();
      }
    

    并像这样在 WarmUpService 中获得本地 Kestrel 地址:

    string baseUrl = AppDomain.CurrentDomain.GetData("BaseUrl").ToString();
    

    【讨论】:

    • 顺便说一句,我停止使用此功能是因为如果您使用 IIS 集成,则无论如何都无法使用此地址。中间件检查请求是否必须包含一个令牌,该令牌由 IIS 生成并随每个请求提供给服务。您自己的请求被中间件拒绝。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 2015-04-20
    • 1970-01-01
    相关资源
    最近更新 更多