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

使用.NET Minimal API调用第三方API的实现疑问

解决方案

你的代码存在重复构建宿主的问题,Host.CreateDefaultBuilder 和 WebApplication.CreateBuilder 无需同时使用,后者已包含宿主构建的完整逻辑。以下是修正并完善后的代码:

var builder = WebApplication.CreateBuilder(args);

// 配置服务
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.AddOptions<FuelControllerOptions>()
    .Bind(builder.Configuration.GetSection("FuelControllerSettings"));

builder.Services.AddSingleton<IFuelController, FuelController>();

builder.Services.AddHostedService<Worker>();

var app = builder.Build();
ILogger logger = app.Logger;

// 开发环境启用Swagger(方便调试)
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

// 实现调用Fuel Controller的Get端点
app.MapGet("/", async (IFuelController fuelController) =>
{
    try
    {
        // 调用FuelController的业务方法,替换为你实际的方法名
        var result = await fuelController.GetFuelDataAsync();
        return Results.Ok(result);
    }
    catch (Exception ex)
    {
        logger.LogError(ex, "调用Fuel Controller时出现异常");
        return Results.StatusCode(StatusCodes.Status500InternalServerError);
    }
})
.WithName("GetFuelData")
.WithOpenApi();

app.Run();

关键细节说明:

  • 移除冗余宿主构建:删除独立的Host.CreateDefaultBuilder代码,统一使用WebApplication.CreateBuilder配置服务,这是.NET 6+ Minimal API的标准写法。
  • 依赖注入规范:在端点参数中注入IFuelController而非具体实现类,符合依赖倒置原则,确保DI容器能正确解析实例。
  • 异步处理:如果FuelController调用外部API的方法是异步的(推荐异步避免线程阻塞),使用async/await处理逻辑。
  • 错误捕获与日志:添加异常捕获和日志记录,保证端点出错时返回合理状态码并留存问题信息。

注意:需确保IFuelController中定义了对应的业务方法(比如示例中的GetFuelDataAsync),且FuelController实现类已完成外部API的调用逻辑(通常需要注入HttpClient,若未配置可在服务中添加builder.Services.AddHttpClient();)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:40:38