C# BotFramework:PrivateConversationData或UserData变为空

C# BotFramework:PrivateConversationData或UserData变为空,c#,azure,botframework,C#,Azure,Botframework,在MessagesController.cs中,以下代码在Post方法中执行 if (activity.Text.ToLowerInvariant().StartsWith("code:")) { var stateClient = activity.GetStateClient(); var botData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);

在MessagesController.cs中,以下代码在Post方法中执行

if (activity.Text.ToLowerInvariant().StartsWith("code:"))
{
    var stateClient = activity.GetStateClient();
    var botData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);
    var token = botData.GetProperty<string>("AccessToken");

    BotUserModel botUser = CreateNewUser(token);

    var privateData = await stateClient.BotState.GetPrivateConversationDataAsync(activity.ChannelId, activity.Conversation.Id, activity.From.Id);
    privateData.SetProperty<BotUserModel>("botUser", botUser);
}
else 
{
     await Conversation.SendAsync(activity, () => new LuisDialog());
}
现在,我得到了DoSomething方法中LUIS对话框中设置的TestValue的值

因此,本质上,其他LUIS意图可以访问LUIS意图中私有会话数据或用户数据的任何数据集;然而,调用LUIS之前MessageController.cs中的数据集在LUIS中不可访问

也尝试使用UserData


我遗漏了什么吗?

您忘记将私有数据存储设置回状态客户端。这应该能让它起作用

var privateData = await stateClient.BotState.GetPrivateConversationDataAsync(activity.ChannelId, activity.Conversation.Id, activity.From.Id);
privateData.SetProperty<BotUserModel>("botUser", botUser);
await stateClient.BotState.SetPrivateConversationDataAsync(activity.ChannelId, activity.Conversation.Id, activity.From.Id, privateData);

查看州客户机上的。

发现得很好。。错过了那一行!
 [LuisIntent("DoSomethingNew")]
 public async Task DoSomethingNew(IDialogContext context, LuisResult result)
 {
      // Assuming DoSomething intent is invoked first        
      BotUserModel botUser;
      context.PrivateConversationData.TryGetValue<BotUserModel>("TestValue", out botUser);             
      // Here, no exception!
 }
var privateData = await stateClient.BotState.GetPrivateConversationDataAsync(activity.ChannelId, activity.Conversation.Id, activity.From.Id);
privateData.SetProperty<BotUserModel>("botUser", botUser);
await stateClient.BotState.SetPrivateConversationDataAsync(activity.ChannelId, activity.Conversation.Id, activity.From.Id, privateData);