Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不保存数据_C#_.net_Botframework - Fatal编程技术网

C# 不保存数据

C# 不保存数据,c#,.net,botframework,C#,.net,Botframework,我试图为C#中的首次运行创建中间件,但似乎无法让它保存数据。由于中间件中不存在上下文,因此我使用以下语法来保存数据。它不仅不能保存,而且我想知道以下几点: 为什么,当我在普通对话框中保存时,我可以访问SetValue,而在这里我只能访问SetProperty public class FirstRunActivityLogger : IActivityLogger { public async Task LogAsync(IActivity activity) {

我试图为C#中的首次运行创建中间件,但似乎无法让它保存数据。由于中间件中不存在上下文,因此我使用以下语法来保存数据。它不仅不能保存,而且我想知道以下几点:

为什么,当我在普通对话框中保存时,我可以访问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);
        }
    }
}
公共类FirstRunActivityLogger:IActivityLogger
{
公共异步任务LogAsync(IActivity活动)
{
var allActivity=(活动)活动;
StateClient StateClient=allActivity.GetStateClient();
BotData userData=await stateClient.BotState.GetUserDataAsync(activity.ChannelId,activity.From.Id);
如果(!userData.GetProperty(“FirstRun”))
{
Debug.WriteLine($“From:{activity.From.Id}-到:{activity.Recipient.Id}-消息:{activity.AsMessageActivity()?.Text}”);
SetProperty(“FirstRun”,true);
}
}
}

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

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