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

如何使用控制台应用自托管ASP.NET Core WebAPI(.NET 8)

.NET 8 实现 ASP.NET Core Web API 控制台自托管

实现步骤

1. 新建控制台项目并引入依赖

创建一个.NET 8控制台应用,执行以下命令添加ASP.NET Core核心依赖:

dotnet add package Microsoft.AspNetCore.App

2. 迁移Web API配置逻辑

把原有Web API项目Program.cs中的服务注册、中间件配置直接迁移到控制台项目的Program.cs中,核心是用WebApplication.CreateBuilder替代控制台默认的主机构建逻辑。

完整代码示例

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;

// 构建Web应用主机,复用Web API的配置方式
var builder = WebApplication.CreateBuilder(args);

// 复制原有Web API的服务注册代码
builder.Services.AddControllers();
// 保留Swagger配置(如果原有API用到)
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// 其他自定义服务注册(如数据库上下文、业务服务)直接从原有API复制

var app = builder.Build();

// 复制原有Web API的中间件配置
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

// 启动Web服务,控制台会保持运行直到服务停止
await app.RunAsync();

最佳实践与注意点

  • 配置文件复用:将原有Web API的appsettings.json、appsettings.Development.json等配置文件复制到控制台项目,在文件属性中设置“复制到输出目录”为“如果较新则复制”,保证配置逻辑一致。
  • 端口自定义:通过builder.WebHost.UseUrls("http://*:5000", "https://*:5001");指定监听端口,避免默认端口冲突,生产环境建议使用标准端口。
  • 日志优化:控制台默认输出日志到终端,可通过appsettings.json调整日志级别减少冗余输出:
    "Logging": {
      "LogLevel": {
        "Default": "Information",
        "Microsoft.AspNetCore": "Warning"
      }
    }
    
  • 独立发布:生成不依赖.NET Runtime的独立可执行文件,以Windows x64为例:
    dotnet publish -c Release -r win-x64 --self-contained true
    
  • 长期运行配置:如需后台运行,可将控制台应用注册为系统服务:
    • Windows:安装Microsoft.Extensions.Hosting.WindowsServices包,调用builder.Host.UseWindowsService()
    • Linux:安装Microsoft.Extensions.Hosting.Systemd包,调用builder.Host.UseSystemd()

常见问题解决

  • HTTPS证书异常:开发环境执行dotnet dev-certs https --trust生成信任证书;生产环境通过Kestrel配置正式SSL证书:
    builder.WebHost.ConfigureKestrel(options =>
    {
        options.ListenAnyIP(5001, o => 
            o.UseHttps("your-cert.pfx", "cert-password"));
    });
    
  • 依赖缺失:对比原有Web API项目的.csproj文件,确保所有NuGet包都已添加到控制台项目中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:37:03