C# 如何在另一个对话框中存储要访问的用户信息-Bot framework V3

C# 如何在另一个对话框中存储要访问的用户信息-Bot framework V3,c#,botframework,bots,C#,Botframework,Bots,我在bot框架中存储用户配置文件时遇到问题。在我的bot中,我使用AAD身份验证并将检索到的用户名存储在类中 tokenstring = resultToken.AccessToken; userName = resultToken.UserName; Globalvariables.username = userName; 然后尝试在另一个对话框中检索类似于Globalvariables.username的内容 但是当两个用户同时访问bot时,它就完全搞砸了。有没有其他方法可以做到这一点 我

我在bot框架中存储用户配置文件时遇到问题。在我的bot中,我使用AAD身份验证并将检索到的用户名存储在类中

tokenstring = resultToken.AccessToken;
userName = resultToken.UserName;
Globalvariables.username = userName;
然后尝试在另一个对话框中检索类似于
Globalvariables.username的内容
但是当两个用户同时访问bot时,它就完全搞砸了。有没有其他方法可以做到这一点

我正在使用Bot框架v3

下面是我试图获取信息的另一种方式

在“登录”对话框中

StateClient stateClient = new StateClient(new MicrosoftAppCredentials(ConfigurationManager.AppSettings["MicrosoftAppId"], ConfigurationManager.AppSettings["MicrosoftAppPassword"]));
BotData userData = await stateClient.BotState.GetUserDataAsync(authContext.Activity.ChannelId, authContext.Activity.From.Id);
userData.SetProperty<string>("username", resultToken.UserName);
StateClient StateClient=new StateClient(新的MicrosoftAppCredentials(ConfigurationManager.AppSettings[“MicrosoftAppId”]、ConfigurationManager.AppSettings[“MicrosoftAppPassword”]);
BotData userData=await stateClient.BotState.GetUserDataAsync(authContext.Activity.ChannelId、authContext.Activity.From.Id);
SetProperty(“用户名”,resultToken.username);
用于在另一个对话框中检索存储的用户名

StateClient stateClient = new StateClient(new MicrosoftAppCredentials(ConfigurationManager.AppSettings["MicrosoftAppId"], ConfigurationManager.AppSettings["MicrosoftAppPassword"]));
BotData userData = await stateClient.BotState.GetUserDataAsync(context.Activity.ChannelId, context.Activity.From.Id);
context.UserData.SetValue("username", userData.GetProperty<string>("username"));  
StateClient StateClient=new StateClient(新的MicrosoftAppCredentials(ConfigurationManager.AppSettings[“MicrosoftAppId”]、ConfigurationManager.AppSettings[“MicrosoftAppPassword”]);
BotData userData=await stateClient.BotState.GetUserDataAsync(context.Activity.ChannelId,context.Activity.From.Id);
context.UserData.SetValue(“用户名”,UserData.GetProperty(“用户名”);

但是这似乎被贬低了,并且没有按预期工作。

正如您所发现的,StateClient方法被弃用,因为它们使用的默认状态服务已经弃用。但是,IDialogContext具有IDataBag实现,可以轻松访问.UserData、.PrivateConversationData和.ConversationData中的信息存储和检索

在登录对话框中,您应该能够通过IDialogContext存储用户名,如:

context.UserData.SetValue("UserName", resultToken.UserName);
然后在其他对话框中访问它:

var userName = context.UserData.GetValueOrDefault("UserName", string.Empty);

使用用户名作为键,令牌字符串作为值的字典,但要在另一个对话框中访问它,我需要用户名可用,不是吗?