首页 > 编程语言 >如何获取Asp.NetCore当前启动地址

如何获取Asp.NetCore当前启动地址

时间:2024-07-26 09:25:42浏览次数:13  
标签:Asp 启动 NetCore BackgroundService 应用程序 获取 地址 HttpContext

在ASP.NET Core中获取当前启动地址,可以通过几种不同的方式来实现,具体取决于你的应用场景和可用的上下文。以下是一些常见的方法:

1. 使用HttpContext

在控制器或中间件中,你可以通过HttpContext对象来获取当前请求的完整URL或主机地址。这是最直接的方法,因为HttpContext提供了对当前HTTP请求的详细信息。

public string GetServerAddress(HttpContext context)  
{  
    // 获取当前请求的完整URL  
    return context.Request.GetEncodedUrl();  
  
    // 或者,如果你只需要主机地址  
    // return context.Request.Host.ToString();  
}

需要注意的是,HttpContext对象在控制器或中间件中是可用的,但在后台服务(如BackgroundService)中则不是直接可用的。

2. 在BackgroundService中获取启动地址

由于BackgroundService在应用程序启动前就开始执行,它不能直接访问HttpContext。但你可以通过ASP.NET Core应用程序的生存期事件来等待应用程序启动完成后再获取启动地址。

一种方法是使用IHostApplicationLifetime接口,并在应用程序启动后通过IServiceProvider获取IServerIServerAddressesFeature来检索地址。

internal class DemoBackgroundService : BackgroundService  
{  
    private readonly IServiceProvider _services;  
    private string _url;  
  
    public DemoBackgroundService(IServiceProvider services, IHostApplicationLifetime lifetime)  
    {  
        _services = services;  
        lifetime.ApplicationStarted.Register(OnAppStarted);  
    }  
  
    public void OnAppStarted()  
    {  
        var server = _services.GetService<IServer>();  
        _url = server.Features.Get<IServerAddressesFeature>().Addresses.First();  
    }  
  
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)  
    {  
        while (string.IsNullOrWhiteSpace(_url))  
        {  
            await Task.Delay(1000);  
        }  
  
        Console.WriteLine("BackgroundService ExecuteAsync");  
        Console.WriteLine(_url);  
        await Task.CompletedTask;  
    }  
}

3. 使用IWebHostEnvironmentIWebHost(已弃用)

在ASP.NET Core的早期版本中,可能会使用IWebHostEnvironment(或其前身IHostingEnvironment)来获取应用程序的基础路径等信息,但这并不直接提供启动地址。然而,你可以结合其他信息(如配置文件中的设置)来构建启动地址。

4. 配置文件

在某些情况下,将启动地址存储在配置文件(如appsettings.json)中可能是一个更灵活的选择。这样,你可以在应用程序启动时读取这些设置,并在需要时使用它们。

结论

根据你的具体需求(如在控制器中、中间件中或后台服务中),你可以选择上述方法之一来获取ASP.NET Core的当前启动地址。在后台服务中,由于不能直接访问HttpContext,你可能需要利用ASP.NET Core的生存期事件或其他机制来间接获取这些信息。

标签:Asp,启动,NetCore,BackgroundService,应用程序,获取,地址,HttpContext
From: https://blog.csdn.net/x1234w4321/article/details/140604710

相关文章

  • Metasploit Pro 4.22.2-2024071901 (Linux, Windows) - 专业渗透测试框架
    MetasploitPro4.22.2-2024071901(Linux,Windows)-专业渗透测试框架Rapid7Penetrationtesting,releaseJul19,2024请访问原文链接:https://sysin.org/blog/metasploit-pro-4/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org世界上最广泛使用的渗透测试框架......
  • H3CNE(IP地址与子网划分)
    目录4.1进制转化4.1.1IP地址表示 4.1.2十进制转二进制​编辑4.2IP地址构成4.2.1IP与子网掩码网络部分:用来标识一个网络4.2.2IP寻址与网关概念4.3IP地址分类 4.3.1IP地址类型与其取值范围 4.3.2私网IP地址 4.3.3特殊IP地址4.4子网划分示例1:示例2:......
  • Asp.Net Core Serilog日志自定义Sink
    项目的日志框架使用了Serilog,现在有需求要将异常日志记录一份到数据库中。目前网上可以找到适配各个数据库的Sink。https://github.com/serilog/serilog/wiki/Provided-Sinks但是由于项目需要适配多个不同类型的数据库,故打算自定义一个DatabaseSink,使用SqlSugar进行数据库操作。......
  • 《遗迹2》二十八项修改器:风灵月影官方版下载地址
    《遗迹2》是GunfireGames制作,GearboxPublishing发行的一款联机第三人称类魂射击游戏,在游戏中,人类幸存者将再次深陷可怕的世界,对抗新的邪恶怪物和神一般的敌人头目。关于《遗迹2》风灵月影MOD的使用教程如下:使用教程1.查找并下载MOD:首先,浏览知名的MOD分享平台,例如Nexus......
  • Maven中GeoTools的引入及Maven中央仓库地址大全
    Maven官方https://mvnrepository.com/repos/centralMaven中央仓库地址大全https://blog.csdn.net/chinawangfei/article/details/122049810Maven中GeoTools的引入-Maven的repository与mirrorhttps://blog.csdn.net/Sky_Tree_Delivery/article/details/105415048pom.xm......
  • 使用GG获取函数寄存器地址
    此方法是从神秘老师(一只神秘)的视频得到的灵感,分享出来也是经过其本人的同意视频如下也希望大家多多支持神秘老师捏多的不说,少的不唠,也是进入正题我们先找到需要获取的函数然后进行分配内存页,保存该地址然后在函数头进行如下的操作码修改意思就是:把该地址传给r1再......
  • 第十二节 JMeter基础-中级地址信息【IF控制器】
    声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改。 背景:提交订单前,我们需要核对一些信息,比如商品信息,收货地址,支付方式等。现在核对一下收货地址信息。思路:1、前提条件:A用户登录。2、先判断地址列表是否有收货地址3、如果没有收货地址,则新增默认收货地......
  • 天问物业ERP系统 ContractDownLoad.aspx 任意文件读取漏洞复现
    0x01产品简介天问互联科技有限公司以软件开发和技术服务为基础,建立物业ERP应用系统,向物管公司提供旨在降低成本、保障品质、提升效能为目标的智慧物管整体解决方案,实现物管公司的管理升级;以平台搭建和资源整合为基础,建立社区O2O服务平台,向物管公司提供旨在完善服务、方便业主......
  • 类库项目无法引用Microsoft.AspNetCore程序集下的类库
    类库项目无法引用Microsoft.AspNetCore程序集下的类库 在类库项目中不能直接引用WebApplicationBuilder、ApplicationBuilder等类,这些类位于Microsoft.ASPNetCore程序集中,但是无法通过Nuget包引用,因为该Nuget包的版本已经不再支持,很久没有更新过了。解决方法:在项目文件cspr......
  • 代理IP地址的高效配置与实测解析
    面对市场上琳琅满目的代理服务,如何找到那个既高效又可靠的伙伴,成为了摆在我们面前的一道难题。今天,测评团队将带您深入探索两家备受瞩目的代理IP服务商,通过实测数据与配置技巧,为您揭开它们高效运作的秘密。一、极光HTTP配置便捷性解析极光HTTP以其简洁明了的配置界面和详尽......