我遇到了一个奇怪的问题。
有一个包含 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”是唯一的,但我在所有调用中都获得相同的值?
有什么想法为什么会发生这种情况吗?
您可以实现以下代码来防止缓存:-
我创建了一个示例函数应用程序和控制台应用程序,通过防止缓存来解决您的问题,如下所示:-
我的控制台应用程序:-
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==¶m1=value1¶m2=value2¶m3=value3¶m4=value4¶m5=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);
}
}
}
}
输出:-
我的功能触发代码:-
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==¶m1=value1¶m2=value2¶m3=value3¶m4=value4¶m5=value5
输出:-