gpt4 book ai didi

azure - 如何让某些代码仅在Azure函数第一次运行时运行?

转载 作者:行者123 更新时间:2023-12-02 09:07:49 25 4
gpt4 key购买 nike

我正在编写一个 azure 函数来从 token 服务请求 token 。具体来说,是聊天机器人的网络聊天 token ,为此,我需要将不记名 token 附加到请求中,并且只有一个 httpClient 来处理所有请求。

我只想运行以下行一次:httpClient.DefaultRequestHeaders.Add("授权", "承载"+ accessToken);。第一次调用该函数,否则会出现授权 header 已存在的错误。

我当前的解决方法是使用另一个静态 bool 值,该值在第一次运行后进行检查并随后更新。

这是下面的 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;}
}

现在似乎可行,但应该有更合适的方法来做到这一点。谢谢!

最佳答案

您可以使用 Static Constructor ,它“用于初始化任何静态数据,或执行只需执行一次的特定操作。它会在创建第一个实例或引用任何静态成员之前自动调用。”

例如:

class Globals
{
public readonly static HttpClient httpClient;
public readonly static string secret;
static Globals()
{
httpClient = new HttpClient();
secret = "";
httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + secret);
}
}

请记住,您的函数应用可能有多个实例同时运行。静态构造函数将在每个应用程序实例中调用一次,并且会在函数应用程序重新启动时重复调用。

关于azure - 如何让某些代码仅在Azure函数第一次运行时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55944370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com