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

.NET 5使用Dapr PubSub集成多消息队列时Payload为null问题求助

问题修复方案

1. 启用CloudEvents中间件

你在Startup.cs的Configure方法中注释掉了app.UseCloudEvents();,这是核心问题原因:Dapr推送的Pub/Sub消息默认遵循CloudEvents规范,该中间件负责解析CloudEvent格式并把消息载荷映射到接口参数,取消注释即可:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();
    // 取消下面这行的注释
    app.UseCloudEvents();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapSubscribeHandler();
        endpoints.MapControllers();
    });
}

2. 为订阅接口的参数添加[FromBody]特性

显式添加[FromBody]可以避免模型绑定逻辑异常导致的参数解析失败,把所有订阅方法的参数都按如下格式修改:

// 示例,其余rabbit、redis的订阅方法做相同修改即可
[HttpPost("nats/subscribe")]        
[Topic("nats-pubsub", "orders.new")]
public async Task<ActionResult> SubscribeAsync([FromBody] Message message)
{          
    this.logger.LogInformation("Message received: " + JsonConvert.SerializeObject(message));
    return Ok("Received!");
}

3. 可选:统一命名空间避免潜在异常

你的控制器代码位于小写live命名空间,Startup.cs位于大写Live命名空间,建议统一为相同命名空间,避免程序集加载时出现意外问题。

修改完成后重新执行dapr run -a live -p 5226 dotnet run启动应用,即可正常解析Message的Payload属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:45:00