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

ASP.NET Core 6.0如何在Program.cs中配置AutoMapper并解决运行报错

问题原因

报错Cannot modify ServiceCollection after application is built的根本原因是:你把AddAutoMapper服务注册代码放在了builder.Build()语句之后。ASP.NET Core 6+的顶层语句Program.cs中,builder.Build()执行后就会完成服务容器的构建,之后不允许再修改服务集合。

正确配置步骤

1. 调整Program.cs代码顺序

所有服务注册逻辑必须放在builder.Build()之前,示例代码如下:

var builder = WebApplication.CreateBuilder(args);

// 所有服务注册都要写在这个区域,包括AutoMapper配置
builder.Services.AddControllers();
// AutoMapper配置,你的自定义Profile类写法可以直接沿用
builder.Services.AddAutoMapper(typeof(TechnePaymentApi.Utilities.Automapper));

// 注意:builder.Build()是服务注册的分割线,之后不能再调用builder.Services添加服务
var app = builder.Build();

// 下面都是中间件配置、路由配置等逻辑
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

2. 确认自定义Profile配置有效

你写的Automapper配置类完全符合要求,继承Profile、在构造函数中声明映射规则的写法是正确的,无需修改。

使用验证

配置完成后,可以在控制器/服务中直接注入IMapper使用映射功能,示例如下:

[ApiController]
[Route("[controller]")]
public class PaymentController : ControllerBase
{
    private readonly IMapper _mapper;
    // 构造函数注入
    public PaymentController(IMapper mapper)
    {
        _mapper = mapper;
    }

    [HttpPost]
    public IActionResult CreatePayment(PaymentRequest request)
    {
        // 调用映射
        var viewModel = _mapper.Map<PaymentRequestViewModel>(request);
        // 后续业务逻辑
        return Ok(viewModel);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:15:01