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

如何使用C# Mapster将CreateTaskRequest与额外用户名映射到CreateTaskCommand?

使用Mapster将请求对象与额外字段映射到命令对象

方法1:映射时直接传递额外参数(无需修改全局配置)

这种方式最简单,适合仅在单个地方使用的场景。直接在控制器中调用Mapster的Adapt方法,指定额外字段的值:

修改控制器代码如下:

[HttpPost("Task/Create")]
public async Task<IActionResult> CreateTask(CreateTaskRequest request)
{
    var username = User.FindFirstValue(ClaimTypes.GivenName)!;

    // 使用Mapster完成映射
    var command = request.Adapt<CreateTaskCommand>(config => 
        config.Map(dest => dest.Username, _ => username));

    var taskResult = await _mediator.Send(command);

    return Ok("Task Created");
}

或者用更简洁的With语法:

var command = request.Adapt<CreateTaskCommand>()
    .With(dest => dest.Username, username);

方法2:全局配置映射规则(适合多处复用场景)

如果需要在多个地方复用该映射逻辑,可以在TodolistMappingConfiguration中配置规则,通过Mapster上下文传递额外值:

首先更新映射配置类:

public class TodolistMappingConfiguration : IRegister
{
    public void Register(TypeAdapterConfig config)
    {
        config.NewConfig<CreateTaskRequest, CreateTaskCommand>()
            // 从映射上下文中获取Username参数
            .Map(dest => dest.Username, _ => TypeAdapterConfig.GlobalSettings.GetContext().Parameters["Username"]);
    }
}

然后在控制器中调用时传递参数:

[HttpPost("Task/Create")]
public async Task<IActionResult> CreateTask(CreateTaskRequest request)
{
    var username = User.FindFirstValue(ClaimTypes.GivenName)!;

    // 传递Username到映射上下文
    var command = request.Adapt<CreateTaskCommand>(new { Username = username });

    var taskResult = await _mediator.Send(command);

    return Ok("Task Created");
}

说明

  • Mapster会自动匹配同名属性(比如Message字段),无需额外配置。
  • 两种方法都能实现需求,选择哪种取决于你是否需要复用映射规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:40:27