我的Azure API管理服务连接到无服务器的HTTPTrigger,但几个小时后,它停止工作并返回401 Unauthorized

bnl4lu3b  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(87)

我正在使用API管理服务来管理我的API。当我最初设置时:
i)API -使用HTTPTrigger指向Azure函数应用ii)产品-使用API iii)订阅-由产品创建
最初它工作得很好。我可以通过curl命令手动查询它,如下所示:
curl -X GET "https://mydomain.io/foo/v1/get-my-data?input_value=3" -H Ocp-Apim-Subscription-Key: <KEY>
但是几个小时后(<12),它突然开始失败,并返回401。它不仅在命令行中失败,甚至在API Azure控制台中使用“Test”工具也会失败-参见屏幕截图

< HTTP/1.1 401 Unauthorized
我什么都没改变,它就开始发生了。我可以通过以下方式解决问题:
1.删除订阅
1.移除产品
1.删除API
1.重新添加API
1.使用订阅重新添加产品
我是一个使用API管理服务的新手。
阅读我检查过的许多Azure故障排除文档:

  • 我的订阅没有设置费率限制
  • 订阅密钥正确
  • 单独更改订阅密钥并不能解决问题,只有重新创建API才能解决问题

测试工具不工作的事实让我认为这与API和无服务器HTTPTrigger之间的握手有关。但我真的不知道该怎么解决。

vdzxcuhz

vdzxcuhz1#

我在Azure中使用了下面的代码。

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json; 
public  static  async Task<IActionResult> Run(HttpRequest req, string customerName, ILogger log)
{

log.LogInformation("C# HTTP trigger function processed a request.");
string name = customerName;
string requestBody = await  new StreamReader(req.Body).ReadToEndAsync();

dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.": $"Hello, {name}. This HTTP triggered function executed successfully.";

return  new OkObjectResult(responseMessage);
}

带Http触发器的无服务器Az-Function

代码片段

响应

使用Azure函数URL

  • 并创建了API管理,并将上述客户功能链接到API管理,没有任何问题。

  • 检查以下设置。

  • 此外,在创建API管理时,检查有效的详细信息。

有关详细信息,请参阅Errors with API ManagementAzure API Management.

相关问题