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

如何使用C#获取Web Chat客户端传递给Bot的Channel Data

在C#服务器端访问Web Chat发送的Channel Data

你在前端通过Web Chat的store给 outgoing activity 附加了myCustomProperty自定义属性,在C#后端的Bot里其实很容易拿到这个值,我给你两种常用的实现方式:

方式1:用dynamic类型快速访问

这种方式代码简洁,适合快速开发,但要注意如果属性名拼写错误会触发运行时异常:

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    if (turnContext.Activity.ChannelData != null)
    {
        dynamic channelData = turnContext.Activity.ChannelData;
        string customValue = channelData.myCustomProperty;

        // 这里可以根据拿到的值做后续业务处理
        await turnContext.SendActivityAsync(MessageFactory.Text($"我收到你的自定义属性啦:{customValue}"), cancellationToken);
    }
    else
    {
        await turnContext.SendActivityAsync(MessageFactory.Text("没收到自定义的Channel Data哦"), cancellationToken);
    }
}

方式2:用JObject做强类型检查(更安全)

如果想避免拼写错误、需要更严谨的类型校验,推荐用Newtonsoft.Json的JObject来解析:

using Newtonsoft.Json.Linq;

// ...

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    if (turnContext.Activity.ChannelData != null)
    {
        var channelDataObj = JObject.FromObject(turnContext.Activity.ChannelData);
        // 用?运算符避免空引用异常
        string customValue = channelDataObj["myCustomProperty"]?.ToString();

        if (!string.IsNullOrEmpty(customValue))
        {
            await turnContext.SendActivityAsync(MessageFactory.Text($"自定义属性值是:{customValue}"), cancellationToken);
        }
        else
        {
            await turnContext.SendActivityAsync(MessageFactory.Text("没找到myCustomProperty这个属性"), cancellationToken);
        }
    }
}

另外要重点注意你前端注释里提到的安全问题:Channel Data非常容易被伪造,所以一定要在后端验证数据的合法性,比如前端给自定义属性附加HMAC签名,后端拿到后重新计算签名并对比,确保数据来自合法客户端,绝对不能直接信任前端传过来的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:14:08