OnTeamsMessageExtensionSubmitationAsync(.Net核心、Botframework、Microsoft团队)的用户状态

OnTeamsMessageExtensionSubmitationAsync(.Net核心、Botframework、Microsoft团队)的用户状态,.net,.net-core,botframework,microsoft-teams,microsoft-graph-teams,.net,.net Core,Botframework,Microsoft Teams,Microsoft Graph Teams,我正在尝试验证Teams应用程序中的用户身份(来自消息传递扩展提交操作) 在中,我发现身份验证流从OnTeamsMessagingExtensionQueryAsync开始,但我需要从onteamsmessagingextensionsubmitationasync(Submitaction)对用户进行身份验证 一切正常,但我无法访问用户的状态,以了解用户是否已通过身份验证,然后获取用于使用图形的令牌。 onteamsMessageExtensionQueryAsync接收MessagingEx

我正在尝试验证Teams应用程序中的用户身份(来自消息传递扩展提交操作)

在中,我发现身份验证流从
OnTeamsMessagingExtensionQueryAsync
开始,但我需要从
onteamsmessagingextensionsubmitationasync
Submit
action)对用户进行身份验证

一切正常,但我无法访问用户的
状态
,以了解用户是否已通过身份验证,然后获取用于使用图形的令牌。
onteamsMessageExtensionQueryAsync
接收
MessagingExtensionQuery
作为操作,该操作具有
状态
属性。 但是
onteamsmessagingextensionsubmitationasync
接收
MessagingExtensionAction
作为操作,它没有
状态
属性

我已经试过了

            var state = turnContext.TurnState.Get<string>("State"); 

嗨,Alexander,您不可能设置发送到submit的有效负载吗?在操作中,您可以利用一个数据字段来设置自己的数据。Hi Alexander,您不可能在发送到submit的有效负载中设置数据吗?在操作中有一个数据字段,您可以利用该字段设置自己的数据
protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionSubmitActionAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
    var magicCode = string.Empty;
    var state = turnContext.TurnState.Get<string>("State"); // always null
    // var state = action.State - in sample
    if (!string.IsNullOrEmpty(state)) 
    {
        int parsed = 0;
        if (int.TryParse(state, out parsed))
        {
            magicCode = parsed.ToString();
        }
    }
    var tokenResponse = await(turnContext.Adapter as IUserTokenProvider).GetUserTokenAsync(turnContext, _connectionName, magicCode, cancellationToken: cancellationToken);
    if (tokenResponse == null || string.IsNullOrEmpty(tokenResponse.Token))
    {

        var signInLink = await(turnContext.Adapter as IUserTokenProvider).GetOauthSignInLinkAsync(turnContext, _connectionName, cancellationToken);

        return new MessagingExtensionActionResponse
        {
            ComposeExtension = new MessagingExtensionResult
            {
                Type = "auth",
                SuggestedActions = new MessagingExtensionSuggestedAction
                {
                    Actions = new List<CardAction>
                    {
                        new CardAction
                        {
                            Type = ActionTypes.OpenUrl,
                            Title = "Authorization",
                            Value = signInLink,
                        },
                    },
                },
            },
        };
    }

<<remaining code>>
    return null;
}