Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET Core 3.0 IHostedService访问web服务器URL-方案、主机、端口等_C#_.net_Asp.net Core_.net Core_Kestrel Http Server - Fatal编程技术网

C# .NET Core 3.0 IHostedService访问web服务器URL-方案、主机、端口等

C# .NET Core 3.0 IHostedService访问web服务器URL-方案、主机、端口等,c#,.net,asp.net-core,.net-core,kestrel-http-server,C#,.net,Asp.net Core,.net Core,Kestrel Http Server,我的问题很简单。我想访问IHostedService中的服务器URL 我找不到做这件事的方法。那里没有任何请求,因此我无法使用IHttpContextAccessor IServer features属性没有任何地址,并且我没有选项 我不想在配置中硬编码服务器的URL 我正在运行的.NET core版本是3.0。您可以在Startup.cs中的依赖项注入框架中注册托管服务: 您可以在Startup.cs中的依赖项注入框架中注册托管服务: 在完全启动服务器之前,无法从服务器获取地址/url 如果需

我的问题很简单。我想访问IHostedService中的服务器URL

我找不到做这件事的方法。那里没有任何请求,因此我无法使用IHttpContextAccessor

IServer features属性没有任何地址,并且我没有选项

我不想在配置中硬编码服务器的URL


我正在运行的.NET core版本是3.0。

您可以在Startup.cs中的依赖项注入框架中注册托管服务:


您可以在Startup.cs中的依赖项注入框架中注册托管服务:


在完全启动服务器之前,无法从服务器获取地址/url

如果需要本地主机地址,请通过编程或其他方式从./Properties/launchSettings.json中查找


如果在实时环境中需要地址,则必须等待服务器加载。

在完全启动服务器之前,无法从服务器获取地址/url

如果需要本地主机地址,请通过编程或其他方式从./Properties/launchSettings.json中查找


如果您在实时环境中需要地址,则必须等待服务器加载。

对于Asp.Net Core 3.1,您无法从IHostedService中的iServerAddresssFeature获取地址,因为IHostedService是在服务器启动之前启动的。看这个

改变的是IHostedService的调用顺序。这在3.0中被提升,但在配置之后仍然运行

要在iHostedService中获取地址,可以在启动后运行它们。我发现其中一种方法是在Program.cs中注册服务,请详细查看

公共课程 { 公共静态无效字符串[]args =>CreateHostBuilderargs.Build.Run; 公共静态IHostBuilder CreateHostBuilderstring[]args=> Host.CreateDefaultBuilderargs .ConfigureWebHostDefaultswebBuilder=>//在此处注册GenericWebHostSevice { webBuilder.UseStartup; } //在配置WebHostDefaults后注册HostedService .配置服务 services=>services.AddHostedService; }
对于Asp.Net Core 3.1,您无法从IHostedService中的iServerAddresssFeature获取地址,因为IHostedService是在服务器启动之前启动的。看这个

改变的是IHostedService的调用顺序。这在3.0中被提升,但在配置之后仍然运行

要在iHostedService中获取地址,可以在启动后运行它们。我发现其中一种方法是在Program.cs中注册服务,请详细查看

公共课程 { 公共静态无效字符串[]args =>CreateHostBuilderargs.Build.Run; 公共静态IHostBuilder CreateHostBuilderstring[]args=> Host.CreateDefaultBuilderargs .ConfigureWebHostDefaultswebBuilder=>//在此处注册GenericWebHostSevice { webBuilder.UseStartup; } //在配置WebHostDefaults后注册HostedService .配置服务 services=>services.AddHostedService; }
我的意思是,你可以将IHttpContextAccessor注入到你的类中。。。如果您能提供更多关于何时何地需要这些信息的上下文,我想我们可以更好地帮助您。我需要在IHostedService中提供这些信息,它将在应用程序启动后立即执行。IHttpContextAccessor需要一个请求,可以在控制器中使用。但在IHostedService中,我没有长话短说的要求,你不能。看,没有别的办法吗?一种不使用HttpContext的方法?我的意思是,您可以将IHttpContextAccessor注入到您的类中。。。如果您能提供更多关于何时何地需要这些信息的上下文,我想我们可以更好地帮助您。我需要在IHostedService中提供这些信息,它将在应用程序启动后立即执行。IHttpContextAccessor需要一个请求,可以在控制器中使用。但在IHostedService中,我没有长话短说的要求,你不能。看,没有别的办法吗?不使用HttpContext的方法?至少在本地运行IIS Express的默认web server builder的Asp.Net Core 3.1的iServerAddress功能中没有地址,即使使用lauchSettings.json和IIS Express配置文件,在本地运行IIS Express的默认web server builder的Asp.Net Core 3.1的iServerAddress功能中也没有地址,至少,即使使用lauchSettings.json和IIS Express配置文件
public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IHostedService, MyHostedService>();
}
public class MyHostedService : IHostedService
{
    private readonly IServer _server;

    public MyHostedService(IServer server)
    {
       _server = server;
    }

    public async Task StartAsync(CancellationToken cancellationToken)
    {
       var features = _server.Features;
       var addresses = features.Get<IServerAddressesFeature>();
       var address = addresses.Addresses.FirstOrDefault(); // = http://localhost:5000
    }
}