为什么 Azure Function v4 (Isolated Process) HttpRequestData.Cookies 是空的?

Why is Azure Function v4 (Isolated Process) HttpRequestData.Cookies empty?

如果我在隔离进程模式下创建了一个 Azure 函数,HttpRequestData.Cookies 是空的。如果我在非隔离模式下创建完全相同的函数,它就会有 cookie。

为了说明我的观点。我创建了 2 个函数。 运行 都在同一个端口上(它们是 运行 独立的)。

隔离处理函数

非隔离过程函数

(这些函数是使用默认的 VS 2021 模板创建的,唯一的变化是函数名称)

在 blazor 中,只需调用函数即可。

在 chrome 中,我可以看到正在传递的 cookie:

(我开始尝试注入 ClaimsPrincipal,如 https://www.youtube.com/watch?v=eZQq3zw3WL4 中所述。在独立的 Azure 函数中,此值为空,并且在非独立的 Azure 函数中也不是。我假设这是因为未提取身份验证 cookie)

编辑: 已接受的答案有助于解决空声明问题。然而,即使声明存在,我们也不会注入 ClaimsPrincipal。我发现这篇文章描述了一种解决方法:https://adamstorr.azurewebsites.net/blog/using-azure-functions-middleware-to-access-claimsprincipal-in-azure-static-web-apps

.Net 5 独立 Http 触发器 Azure 函数:

Non-Isolated 函数: .Net 3.1 Http 触发器 Azure 函数

据我观察In-Process(非隔离)和Out-Process(隔离环境)之间的行为差​​异,即在函数声明中使用HttpRequest/ObjectResult in Non-Isolated and HttpRequestData/HttpResponseData in Isolated.

HttpRequestData Class Microsoft 文档中所述,它获取请求 class 的 cookie。 其中 HttpRequestObjectResult classes 是 ASP .Net Core 功能,用于存储 body、headers、cookies、content-type, content-length 等等,.

并且 Azure Functions 的主要用例是无状态的。您可能可以使用 Request.CookiesResponse.Cookies 自己模拟它,但是 ASP .NET 功能不能直接应用于 Functions。

GitHub Issues Page of azure-functions-dotnet-worker 的 12 月份,它被标记为 Azure Functions v3 中的一个错误,即 HttpRequestData.Cookies 是空的,但是当我们指定 Cookies class 时可以解决从请求 object 或者当我们将 Microsoft.Azure.Functions.Worker 更新到 1.6.0 版本时可以解决。

参考: https://docs.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide#differences-with-net-class-library-functions