c# - 如何在 C# 中使用 REST API 获取 Azure Batch 池和作业的列表?
问题描述
使用 REST API 我想获取批处理池和作业的列表。
根据文档:
Pool - Get | Microsoft Docs - https://docs.microsoft.com/en-us/rest/api/batchservice/pool/get
工作 - 获取 | Microsoft Docs - https://docs.microsoft.com/en-us/rest/api/batchservice/job/get
获取工作列表GET {batchUrl}/jobs?api-version=2019-08-01.10.0
和获取池的 APIGET {batchUrl}/pools?api-version=2019-08-01.10.0
在 C# 中我这样做是这样的:
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + _accessToken);
using (var responseGet = client.GetAsync(api).Result) //HttpClient client
{
if (responseGet.IsSuccessStatusCode)
{
dynamic batchObjectsContent = JObject.Parse(responseGet.Content.ReadAsStringAsync().Result);
foreach (var batchObject in batchObjectsContent.value)
{
batchObjects.Add(new BatchObject { Id = batchObject.id, Url = batchObject.url, CreationTime = batchObject.creationTime, StateTransitionTime = batchObject.stateTransitionTime });
}
}
}
获取池的完整 API 是https://mybatch.westus2.batch.azure.com/pools?api-version=2019-08-01.10.0
,作业的 api 是https://mybatch.westus2.batch.azure.com/jobs?api-version=2019-08-01.10.0
.
Error message I am getting:
StatusCode=Unauthorized
ReasonPhrase="Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly."
error="invalid_audience", error_description="The access token has been obtained from wrong audience or resource 'https://management.azure.com/'. It should exactly match (including forward slash) with one of the allowed audiences 'https://batch.core.windows.net/'"
这就是我获得访问令牌的方式authenticationContext.AcquireTokenAsync("https://management.azure.com/", credential).Result.AccessToken;
:这适用于所有与https://management.azure.com/
.
从错误中我认为访问令牌或标头错误或两者都有问题。我该如何纠正它们?
解决方案
使用 Azure Batch 资源终结点获取用于对 Batch 服务的请求进行身份验证的令牌:
https://batch.core.windows.net/
使用如下代码:
private const string BatchResourceUri = "https://batch.core.windows.net/";
AuthenticationResult authResult = await authContext.AcquireTokenAsync(BatchResourceUri, new ClientCredential(ClientId, ClientKey));
参考这篇文章。
推荐阅读
- python - 为什么使用二进制精度作为度量会给出更高的精度(95%),而简单的精度会输出低值(46%)
- javascript - 有没有办法在调用 toString 方法时评估函数内部不是函数参数的变量?
- javascript - 如何解决 iframe 的跨域问题?
- sql-server - 如何在 Spring Boot 中将输入文本与数据库值进行比较?
- razorpay - 如何使用 Razorpay 获取付款详情
- python-3.x - 从并行运行的函数中获取输出
- java - Spring Quartz 远程调度器
- docker - Confluent 控制中心通过“exit 1”定期关闭
- azure - 使用 powershell 时如何解决 azure 凭据问题?
- html - 试图为一个回调函数获取多个请求响应