【发布时间】:2021-02-02 08:51:18
【问题描述】:
我想使用 Microsoft.Azure.Management.ApiManagement 将 API 从 swagger/open api 规范导入到 Azure Api Management (APIM)
使用 powershel 很容易做到:
Import-AzApiManagementApi -Context $ApiMgmtContext -SpecificationFormat "Swagger" -SpecificationPath $swaggerOutputFilePath -Path $apiPath -ApiType "Http" -Protocol "Https"
我有一个技术需求,需要通过Microsoft.Azure.Management.ApiManagement 使用 Azure SDK 以务实的方式使用 C# 进行此操作
我从这个post开始:
- 实现
ServiceClientCredentials以检索有效令牌并将其添加到标头授权中
public class AzureApiManagementServiceCredentials : ServiceClientCredentials
{
private string AuthenticationToken { get; set; }
public override void InitializeServiceClient<T>(ServiceClient<T> client)
{
var authenticationContext = new AuthenticationContext("https://login.windows.net/{tenantID}");
var credential = new ClientCredential(clientId: "xxxxx-xxxx-xx-xxxx-xxx", clientSecret: "{clientSecret}");
var result = authenticationContext.AcquireToken(resource: "https://management.core.windows.net/", clientCredential: credential);
if (result == null)
{
throw new InvalidOperationException("Failed to obtain the JWT token");
}
AuthenticationToken = result.AccessToken;
}
// override ProcessHttpRequestAsync to use the authentication token as an Authorization header:
public override async Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request == null) throw new ArgumentNullException("request");
if (AuthenticationToken == null) throw new InvalidOperationException("Token Provider Cannot Be Null");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", AuthenticationToken);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
await base.ProcessHttpRequestAsync(request, cancellationToken);
}
}
另一方面,我有一个 AzureApiManagementService 类来处理 API 和产品:
public async Task<ApiContract> CreateApi(ApimCreateApi apimCreateApi )
{
var serviceCredentials = new AzureApiManagementServiceCredentials();
ApiManagementClient myClient = new ApiManagementClient(serviceCredentials);
//here where I stuck
//I can use myClient.Api.CreateOrUpdateAsync(...)
//but it's going to create just an empty API on APIM
myClient.
...
}
我只能创建一个 API 实体,我找不到从 openApi 规范 /swagger 创建/导入 API 的正确方法。
所以我发布这个是为了获得更多想法并在这个主题上挑战我!
谢谢!
【问题讨论】:
标签: c# azure api azure-api-management azure-sdk-.net