如何在自适应对话框的 HttpRequest 中添加身份验证令牌?
How to add Authentication token in HttpRequest in Adaptive dialog?
我正在使用 Botframework 自适应对话框模板 (c#)。我已经从 HttpRequest 获得了一个令牌并将其保存为对话状态 属性 conversation.token
,现在我正尝试使用此令牌与 HttpRequest 进行另一个 API 调用。但是从HttpRequest Class的官方文档来看,似乎没有添加认证令牌的选项。我尝试在 Headers 中添加令牌,但没有成功,它显示 401 Unauthorized 错误。 HttpRequest in adaptive dialog中的授权应该如何处理?
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请求调用mainAPI。在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();
}),
我正在使用 Botframework 自适应对话框模板 (c#)。我已经从 HttpRequest 获得了一个令牌并将其保存为对话状态 属性 conversation.token
,现在我正尝试使用此令牌与 HttpRequest 进行另一个 API 调用。但是从HttpRequest Class的官方文档来看,似乎没有添加认证令牌的选项。我尝试在 Headers 中添加令牌,但没有成功,它显示 401 Unauthorized 错误。 HttpRequest in adaptive dialog中的授权应该如何处理?
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请求调用mainAPI。在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();
}),