如果两次调用之间的输入数据相同,Azure Functions 将返回相同的数据

问题描述 投票:0回答:1

我遇到了一个奇怪的问题。

有一个包含 5 列的 Excel 工作表。然后我将 5 列中的数据附加到查询字符串中,并在某个单元格中调用返回字符串的 Azure 函数 API。

我面临的问题是,如果Excel中的数据不同,那么我从az函数中获得唯一/不同的数据。但我的数据也可以是相同的。

Web 服务中的逻辑是,它只是创建一个新的数据库记录并返回该记录的唯一 ID。

所以问题是,当我们使用相同的数据进行多个并行调用时,为什么会返回相同的数据。有趣的是,创建了新的数据库记录,但可能返回了缓存的数据。

我尝试添加以下内容

var response = req.CreateResponse();
response.Headers.Add("cache-control", "no-cache");
.....
.....
string RedirectURL = new Helper().GetRedirectURL(CampaignUser.TrackingId);

response.WriteString(RedirectURL);
return response;

“CampaignUser.TrackingId”是唯一的,但我在所有调用中都获得相同的值?

有什么想法为什么会发生这种情况吗?

c# azure-functions
1个回答
0
投票

您可以实现以下代码来防止缓存:-

我创建了一个示例函数应用程序和控制台应用程序,通过防止缓存来解决您的问题,如下所示:-

我的控制台应用程序:-

using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // Replace "YourAzureFunctionUrl" with the actual URL of your Azure Function
        string functionUrl = "https://valleyfunc764.azurewebsites.net/api/CallFunctionFromConsoleApp?code=vCNUSQVORzxFNCYrHVbtjHnjfEyI7ia2rpw3KJOcF_zYAzFukSDIKA==&param1=value1&param2=value2&param3=value3&param4=value4&param5=value5";

        using (HttpClient client = new HttpClient())
        {
            // Prevent caching by adding appropriate headers
            client.DefaultRequestHeaders.Add("Cache-Control", "no-cache");
            client.DefaultRequestHeaders.Add("Pragma", "no-cache");

            HttpResponseMessage response = await client.GetAsync(functionUrl);

            if (response.IsSuccessStatusCode)
            {
                string responseContent = await response.Content.ReadAsStringAsync();
                Console.WriteLine("Response from Azure Function: " + responseContent);
            }
            else
            {
                Console.WriteLine("Error calling Azure Function. Status code: " + response.StatusCode);
            }
        }
    }
}

输出:-

enter image description here

我的功能触发代码:-

using System;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;

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

      
        string param1 = req.Query["param1"];
        string param2 = req.Query["param2"];
        string param3 = req.Query["param3"];
        string param4 = req.Query["param4"];
        string param5 = req.Query["param5"];
        string result = $"{param1} {param2} {param3} {param4} {param5}";

        return new OkObjectResult(result);
    }
}
https://valleyfunc764.azurewebsites.net/api/CallFunctionFromConsoleApp?code=xxxxxxxxxxrpw3KJOcF_zYAzFukSDIKA==&param1=value1&param2=value2&param3=value3&param4=value4&param5=value5

输出:-

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.