C# BotFramework:PrivateConversationData或UserData变为空
在MessagesController.cs中,以下代码在Post方法中执行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);
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);