为什么 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。
其中 HttpRequest
或 ObjectResult
classes 是 ASP .Net Core 功能,用于存储 body、headers、cookies、content-type, content-length 等等,.
并且 Azure Functions 的主要用例是无状态的。您可能可以使用 Request.Cookies
和 Response.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
版本时可以解决。
如果我在隔离进程模式下创建了一个 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。
其中 HttpRequest
或 ObjectResult
classes 是 ASP .Net Core 功能,用于存储 body、headers、cookies、content-type, content-length 等等,.
并且 Azure Functions 的主要用例是无状态的。您可能可以使用 Request.Cookies
和 Response.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
版本时可以解决。