Как динамически изменить вызов ajax для API в функциях Azure? - PullRequest
0 голосов
/ 07 ноября 2019

Я перебираю массив, и для каждого элемента я выполняю вызов API для функций Azure.

Мне нужно передать «ticketKey» на лазурь, а затем добавить тикет к вызову, который я прошу сделать на лазурном.

Попытался отправить ключ заявки в заголовке запроса вызова ajax, но не уверен, как получить его в лазурном коде и добавить его к звонку, который я делаю оттуда.

Для ясности, запрос ajax переходит к функциям Azure, которые затем запускают код, который вы видели под начальным вызовом ajax.

Мне нужно как-то добраться до содержимого вызова ajax (ticketKey) и добавить его к вызову функций Azure

(var content = await client.GetStringAsync(https://blah.com/rest/api/2/issue/{ticketKey})

Мой вызов Ajax:

 var GetTicketInfo = myArray.forEach(function(ticketKey){


    $.ajax
      ({
        type: "GET",
        url: "https://blahblah.azurewebsites.net/api/blahblah",
        dataType: 'json',
        headers : {"ticketKey": ticketKey},
        async: false,
        success: function (res){
        console.log(res);
}
    });

});

Код моих функций Azure:

public static class azureApicall
{
    [FunctionName("AzureCall")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        var client = new HttpClient();
        var user = "blah";
        var pass = "blah";
        var pair = $"{user}:{pass}";
        var bytes = Encoding.ASCII.GetBytes(pair);
        var base64 = Convert.ToBase64String(bytes);
        var authValue = $"Basic {base64}";
        client.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse(authValue);
        client.DefaultRequestHeaders.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/json"));


        var content = await client.GetStringAsync("https://blah.com/rest/api/2/issue/{ticketKey}");
        return (ActionResult)new OkObjectResult(content);
    }
}

сообщение об ошибке при отладке:

[08/11/2019 11:08:02] Host lock lease acquired by instance ID '0000000000000000000000000359A6B5'.
[08/11/2019 11:08:02] Executing HTTP request: {
[08/11/2019 11:08:02]   "requestId": "4739380b-c445-4bb9-8bbc-dd27e1682a63",
[08/11/2019 11:08:02]   "method": "POST",
[08/11/2019 11:08:02]   "uri": "/api/ConfluenceWidgetTeamCity"
[08/11/2019 11:08:02] }
[08/11/2019 11:08:03] Executing 'ConfluenceWidgetTeamCity' (Reason='This function was programmatically called via the host APIs.', Id=72e4c354-299d-4105-9e3d-56a119c5cd6a)
[08/11/2019 11:08:03] C# HTTP trigger function processed a request.
[08/11/2019 11:08:03] Executed 'ConfluenceWidgetTeamCity' (Succeeded, Id=72e4c354-299d-4105-9e3d-56a119c5cd6a)
[08/11/2019 11:08:03] Executed HTTP request: {
[08/11/2019 11:08:03]   "requestId": "4739380b-c445-4bb9-8bbc-dd27e1682a63",
[08/11/2019 11:08:03]   "method": "POST",
[08/11/2019 11:08:03]   "uri": "/api/ConfluenceWidgetTeamCity",
[08/11/2019 11:08:03]   "identities": [
[08/11/2019 11:08:03]     {
[08/11/2019 11:08:03]       "type": "WebJobsAuthLevel",
[08/11/2019 11:08:03]       "level": "Admin"
[08/11/2019 11:08:03]     }
[08/11/2019 11:08:03]   ],
[08/11/2019 11:08:03]   "status": 400,
[08/11/2019 11:08:03]   "duration": 579
[08/11/2019 11:08:03] }

1 Ответ

0 голосов
/ 07 ноября 2019

Вы можете использовать Headers из HttpRequest, чтобы получить свой билет. Пример

req.Headers.TryGetValue("ticketKey", out var result);
var ticketKey= result.FirstOrDefault();

Затем вы можете использовать значение переменной ticketKey в вашем запросе.

var content = await client.GetStringAsync($"https://blah.com/rest/api/2/issue/{ticketKey}");

Обновление - Добавление изображения

Запрос от почтальона

Postman request

Как вы видите, у меня есть значение заголовка ticketKey, переданное со значением, называемым dummy

Вот точка останова VS

enter image description here

...