首页 > 解决方案 > 如何在 azure 函数中动态更改对 api 的 ajax 调用?

问题描述

我正在迭代一个数组,并且我正在对 azure 函数进行 api 调用。

我需要将“ticketKey”传递给 azure,然后将 ticketkey 附加到我要求 azure 进行的呼叫中。

尝试在 ajax 调用的请求标头中发送ticketkey,但不确定如何在 azure 代码中接收它并将其附加到我从那里进行的调用。

为了清楚起见,ajax 请求转到 azure 函数,然后运行您在初始 ajax 调用下方看到的代码。

我需要以某种方式获取 ajax 调用的内容(ticketKey)并将其附加到 azure 函数调用

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

我的阿贾克斯电话:

 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] }

标签: c#.netajaxazure-functions

解决方案


您可以使用HeadersfromHttpRequest获取您的 ticketKey。例子

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}");

更新 - 添加图像

邮递员的要求

邮递员请求

如您所见,我将ticketKey标头值与名为的值一起传递dummy

这是VS断点

在此处输入图像描述


推荐阅读