2017-03-09 10 views
2

C에서 firstRun 용 미들웨어를 만들려고하고 있는데 데이터를 저장하지 못하는 것 같습니다. 컨텍스트가 미들웨어에 존재하지 않으므로 다음 구문을 사용하여 데이터를 저장합니다. 그것은 저장하지 않을뿐만 아니라 다음에 대해 궁금합니다.BotData 저장하지 않음

왜 일반 대화 상자에 저장하면 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); 
     } 
    } 
} 

답변

3

그냥 userData 그냥 객체와 SetProperty()를 호출하면 단순히 아무것도 저장하지 않고 해당 객체의 속성을 설정 떨어져 있음을 유의하십시오. 따라서 bot 상태를 저장하려면 SetUserDataAsync()을 사용하고 변경된 내용을 userData에 전달해야합니다. Here은 어떻게 작성합니까?

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