我收到此记录:[错误] C# HTTP 触发器函数处理了请求。令牌请求失败。当我从门户运行 Azure Function 时。
当我从 Visual Studio(在我的本地)测试/运行应用程序时,它成功更新了该项目,但我无法重现该问题。
我做错了什么吗?
我正在 Azure 函数中使用 PnP.Framework 中的应用程序 id/secret 进行身份验证,如下所示:
[FunctionName("RecordUpdate")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
Microsoft.Extensions.Logging.ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string responseMessage = string.Empty;
string siteUrl = req.Query["siteUrl"];
string listName = req.Query["listName"];
string listItemId = req.Query["listItemId"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
siteUrl = siteUrl ?? data?.siteUrl;
listName = listName ?? data?.listName;
listItemId = listItemId ?? data?.listItemId;
PnP.Framework.AuthenticationManager authenticationManager = new();
try
{
string?[] appDetails = GetAppConfiguration(log);
using (ClientContext context = authenticationManager.GetACSAppOnlyContext(siteUrl, appDetails[0], appDetails[1]))
{
context.RequestTimeout = System.Threading.Timeout.Infinite;
List list = context.Web.Lists.GetByTitle(listName);
context.Load(list);
context.ExecuteQuery();
int id = 0;
bool isValidId = Int32.TryParse(listItemId, out id);
if (list != null)
{
if (isValidId)
{
ListItem item = list.GetItemById(id);
context.Load(item);
context.ExecuteQuery();
if (item != null) { /* my code to update Item goes here */ }
}
}
}
}
}
根据错误消息,身份验证存在问题。
GetAppConfiguration
是否返回预期的应用程序 ID 和秘密?确保用于身份验证的应用程序 ID 具有必要的权限。
如果您已检查所有内容,请添加一些更详细的日志记录以缩小问题范围:从 Azure Function HttpTrigger 返回错误详细信息