Я пытаюсь получить содержимое модуля Runbook с помощью этой конечной точки API - https://docs.microsoft.com/en-us/rest/api/automation/runbook/getcontent
Мне удалось успешно получить данные с помощью почтальона. Тем не менее, я получаю сообщение об ошибке 415 (тип носителя содержимого 'text / powershell' не поддерживается. Поддерживается только 'application / json') от клиента C#.
Вот что я пробовал
public class AzureAutomationCustomClient
{
private readonly AppConfig _appConfig;
private readonly HttpClient _httpClient;
private ILogger<AzureAutomationCustomClient> _logger;
private readonly IAuthProvider _tokenService;
public AzureAutomationCustomClient(AppConfig appConfig, HttpClient httpClient, ILogger<AzureAutomationCustomClient> logger, IServiceProvider serviceProvider)
{
_appConfig = appConfig;
_httpClient = httpClient;
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));// Didn't work
_logger = logger;
_tokenService = serviceProvider.GetServices<IAuthProvider>().First(x => x.GetType() == typeof(AdalAuthProvider));
}
public async Task GetRunbookContentAsync(string runbookName)
{
var url = $"https://management.azure.com/subscriptions/{_appConfig.AzureConfig.SubscriptionId}/resourceGroups/{_appConfig.AzureAutomationConfig.ResourceGroup}/providers/Microsoft.Automation/automationAccounts/{_appConfig.AzureAutomationConfig.AutomationAccountName}/runbooks/{runbookName}/content?api-version=2018-06-30";
var request = new HttpRequestMessage(HttpMethod.Get, url);
_logger.LogInformation($"Sending get request with URL {url}");
request.Headers.Add("accept", "text/powershell");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", await _tokenService.GetAccessTokenAsync());
HttpResponseMessage response = await _httpClient.SendAsync(request);
await _logger.LogHttpResponseAsync(response);
if (!response.IsSuccessStatusCode)
{
_logger.LogError($"Error occurred while fetching runbook content for runbook {runbookName}");
_logger.LogError($"Status code is {response.StatusCode}");
_logger.LogError($"Reason phrase is {response.ReasonPhrase}");
}
response.EnsureSuccessStatusCode();
string content = await response.Content.ReadAsStringAsync();
}
}
Я также пытался использовать Azure SDK и получаю ту же ошибку.
public async Task<Stream> GetRunbookContentAsync(string runbookName)
{
var headers = new Dictionary<string, List<string>>
{
{ "accept", new List<string> { "text/powershell" } }
};
AzureOperationResponse<Stream> response = await AutomationClient.Runbook.GetContentWithHttpMessagesAsync(_resourceGroup, _automationAccountName, runbookName, headers);
return response.Body;
}
Обратите внимание, что это запрос GET, а не POST. Кроме того, он прекрасно работает в почтальоне.