簡體   English   中英

如何在自適應對話框的 HttpRequest 中添加身份驗證令牌?

[英]How to add Authentication token in HttpRequest in Adaptive dialog?

我正在使用 Botframework 自適應對話框模板(c#)。 我已經從 HttpRequest 獲得了一個令牌並將其保存為會話 state 屬性conversation.token .token ,現在我正在嘗試使用此令牌與 HttpRequest 進行另一個 API 調用。 但是從HttpRequest Class的官方文檔來看,似乎沒有添加身份驗證令牌的選項。 我嘗試在 Headers 中添加令牌,但沒有成功,它顯示401 Unauthorized錯誤。 自適應對話框中的 HttpRequest 應該如何處理授權?

new HttpRequest()
{
    Url = "http://example.com/json",
    ResultProperty = "conversation.httpResponse",
    Method = HttpRequest.HttpMethod.GET,
    ResponseType = HttpRequest.ResponseTypes.Json,
    Headers = new Dictionary<string, AdaptiveExpressions.Properties.StringExpression>()
    {
        {"Authorization", "Bearer ${conversation.token.content.token}"},
    },
},
new SendActivity("${conversation.httpResponse}"),

我沒有使用 HttpRequest,而是使用自定義代碼在 CodeAction 中調用了 API。 先發出POST請求獲取token,然后發出GET請求調用主API。 在GET請求中,可以這樣添加授權: client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken); .

new CodeAction(async (dc, options) =>
{
    var my_jsondata = new
    {
        Username = "username",
        Password = "password"
    };
    var json = JsonConvert.SerializeObject(my_jsondata);
    var data = new StringContent(json, Encoding.UTF8, "application/json");
    var Tokenurl = "https://example.com/token?HTTP/1.1";
    using var Tokenclient = new HttpClient();
    var Tokenresponse = await Tokenclient.PostAsync(Tokenurl, data);
    string Toeknresult = Tokenresponse.Content.ReadAsStringAsync().Result;
    var Tokenjo = JObject.Parse(Tokenresult);
                                
    using var client = new HttpClient();
    var url = "https://example.com/mainapi?HTTP/1.1";
    var accessToken = Tokenjo["token"];
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
    var response = await client.GetAsync(url);
    string result = response.Content.ReadAsStringAsync().Result;
                               
    dc.State.SetValue("conversation.httpresponse", response);
    dc.State.SetValue("conversation.result", result);

    return await dc.EndDialogAsync();
}),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM