BotData 不保存

BotData not saving

我正在尝试在 C# 中为 firstRun 创建中间件,但似乎无法使用它来保存数据。由于中间件中不存在上下文,因此我使用以下语法来保存数据。它不仅没有保存,而且我想知道以下内容:

为什么,当我在普通对话框中保存时,我可以访问 SetValue,而在这里我只能访问 SetProperty?

public class FirstRunActivityLogger : IActivityLogger
{
    public async Task LogAsync(IActivity activity)
    {
        var allActivity = (Activity)activity;
        StateClient stateClient = allActivity.GetStateClient();
        BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);
        if (!userData.GetProperty<bool>("FirstRun"))
        {
            Debug.WriteLine($"From:{activity.From.Id} - To:{activity.Recipient.Id} - Message:{activity.AsMessageActivity()?.Text}");
            userData.SetProperty<bool>("FirstRun", true);
        }
    }
}

请记住 userData 只是一个对象,调用 SetProperty() 只是设置该对象的 属性 而不保存任何内容。因此,为了保存机器人状态,您应该使用 SetUserDataAsync() 并将更改后的 userData 传递给它。 Here 是怎么做的:

await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);