Я пишу функцию Azure для запроса токена из сервиса токенов.В частности, токен веб-чата для чат-бота, для этого мне нужно прикрепить токен-носитель к запросу и иметь только один httpClient для всех запросов.
Я просто хочу запустить следующую строку один раз: httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
,При первом вызове функции в противном случае возникает ошибка, говорящая о том, что заголовок авторизации уже существует.
Мой текущий обходной путь имеет другое статическое логическое значение, которое проверяется после первого запуска и обновляется впоследствии.
Ниже приведен код для функции Azure.
#r "Newtonsoft.Json"
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
private static string secret = "";
private static HttpClient httpClient = new HttpClient();
private static bool runOnce = true;
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
if (runOnce){
httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + secret);
runOnce = false;
}
// Token request
var response = await httpClient.GetAsync("https://webchat.botframework.com/api/tokens");
var contents = await response.Content.ReadAsStringAsync();
var obj = new ReturnObject();
obj.Token = contents;
var json = JsonConvert.SerializeObject(obj);
return new OkObjectResult(json);
}
public class ReturnObject
{
public string Token {get; set;}
}
Кажется, это работает прямо сейчас, но должен быть более правильный способ сделать это.Спасибо!