You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于appsettings.json配置Windows服务运行的ASP.NET Core 2 Web API监听URL

在Windows服务的ASP.NET Core 2 Web API中获取IConfiguration并设置监听URL

老哥,这个需求我之前做类似项目时也碰到过,其实实现起来并不复杂,下面给你一步步捋清楚:

第一步:确保appsettings.json能被服务访问到

首先得保证你的appsettings.json文件在服务运行时能被找到。在Visual Studio里右键这个文件,选择「属性」,把「复制到输出目录」改成如果较新则复制或者始终复制——不然服务运行时会找不到配置文件,白忙活一场。

第二步:获取IConfiguration的两种常用方式

ASP.NET Core 2的默认主机构建器已经会自动加载appsettings.json,你可以通过两种方式拿到IConfiguration实例:

方式1:直接构建配置根(适合启动阶段读取配置)

这种方式适合在启动时就需要读取配置的场景(比如设置监听URL),代码示例如下:

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;

namespace YourApiProject
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().RunAsService();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                // 启用Windows服务支持(需先安装NuGet包:Microsoft.AspNetCore.Hosting.WindowsServices)
                .UseWindowsService()
                // 从配置读取并设置监听URL
                .UseUrls(GetListenUrlsFromConfig())
                .UseStartup<Startup>();

        private static string GetListenUrlsFromConfig()
        {
            // 构建配置根,读取appsettings.json
            var configBuilder = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
            
            IConfiguration config = configBuilder.Build();
            
            // 返回配置里的监听URL,节点路径要和你appsettings里的对应
            return config["ApiSettings:ListenUrls"];
        }
    }
}

方式2:利用主机上下文的Configuration(更简洁)

WebHost.CreateDefaultBuilder会自动初始化配置,你可以直接通过主机上下文获取,代码更清爽:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            // 这里可以额外添加配置源,比如环境变量、命令行参数等
            // 默认已经加载了appsettings.json和对应环境的配置文件
        })
        .UseWindowsService()
        // 直接从主机上下文的Configuration读取URL
        .UseUrls(hostingContext.Configuration["ApiSettings:ListenUrls"])
        .UseStartup<Startup>();

第三步:配置appsettings.json的监听URL

在你的appsettings.json里添加对应的配置节点,比如:

{
  "ApiSettings": {
    "ListenUrls": "http://0.0.0.0:5000;https://0.0.0.0:5001"
  }
}

这里可以设置多个URL,用分号分隔,比如同时监听HTTP和HTTPS,或者监听所有网卡的端口。

额外注意事项

  • 别忘了安装Windows服务支持的NuGet包:Microsoft.AspNetCore.Hosting.WindowsServices,不然RunAsService()和UseWindowsService()方法会找不到。
  • 如果你的服务需要监听80、443这类系统端口,要确保服务运行的账号有对应的权限,不然会启动失败。

内容的提问来源于stack exchange,提问作者Nicolas Boisvert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:40:33