Как добавить токен аутентификации в HttpRequest в адаптивном диалоге? - PullRequest
0 голосов
/ 06 августа 2020

Я использую шаблон адаптивного диалога Botframework (c#). Я уже получил токен из HttpRequest и сохранил его как свойство состояния разговора conversation.token, теперь я пытаюсь использовать этот токен, чтобы сделать еще один вызов API с HttpRequest. Но из официального документа HttpRequest Class кажется, что нет вариантов для добавления токена аутентификации. Я попытался добавить токен в заголовки, но не получилось, показала ошибку 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}"),

1 Ответ

0 голосов
/ 08 августа 2020

Вместо использования HttpRequest я сделал вызов API внутри CodeAction с помощью специального кода. Сначала сделайте запрос POST, чтобы получить токен, затем сделайте запрос 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();
}),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...