Azure 函数 http 触发器找不到 Microsoft.Extensions.Primitives.StringValues
Azure functions http trigger cannot find Microsoft.Extensions.Primitives.StringValues
我正在构建一个带有 http 触发器的 Azure Functions v3 .NET Core 3.1 应用程序。我创建了从请求的授权 header 中检索 jwt 并使用 JwtSecurityTokenHandler
对其进行验证的函数。如果我创建一个从 FunctionsStartup 继承的启动 class,这将起作用。但是,如果我从 WebJobStartup 继承,我 运行 会出错。该应用找不到 Microsoft.Extensions.Primitives.StringValues Microsoft.AspNetCore.Http.IHeaderDictionary.get_Item
。我可以单步执行代码,但是任何尝试访问 request.Headers
字典中的条目的函数都不会执行并产生错误(下面的屏幕截图)。
这是代码。如果 req.Headers
引用存在,调试器将不会进入 GetJwtFromHeader
函数:
[FunctionName("HttpAuth")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ExecutionContext context,
ILogger log)
{
SomeFunction();
var jwt = GetJwtFromHeader(req);
}
private string GetJwtFromHeader(HttpRequest req)
{
var authorizationHeader = req.Headers?["Authorization"];
string[] parts = authorizationHeader?.ToString().Split(null) ?? new string[0];
return (parts.Length == 2 && parts[0].Equals("Bearer")) ? parts[1] : string.Empty;
}
调试器从不进入GetJwtFromHeader
函数。如果我删除对 req.Headers 的引用,则调试器将进入它。似乎任何试图通过代码访问 Header 字典的函数都找不到它。但是,如果我检查手表 window 中的 object,我会看到正确的值。
这可能是我的包中的版本控制问题吗?我尝试安装不同版本的 Microsof.Extensions.Primitives
但我在降级到 5.0 以下时遇到问题。为什么我的 Header 字典有问题?
我找到问题了。在我正在导入的项目中,我使用 Microsoft.Extensions.Configuration 从我的秘密中读取条目,由于某种原因,版本 5.0.0 在我的 Azure 函数项目中运行不佳。我将其降级为 3.1.13 并且有效。
我正在构建一个带有 http 触发器的 Azure Functions v3 .NET Core 3.1 应用程序。我创建了从请求的授权 header 中检索 jwt 并使用 JwtSecurityTokenHandler
对其进行验证的函数。如果我创建一个从 FunctionsStartup 继承的启动 class,这将起作用。但是,如果我从 WebJobStartup 继承,我 运行 会出错。该应用找不到 Microsoft.Extensions.Primitives.StringValues Microsoft.AspNetCore.Http.IHeaderDictionary.get_Item
。我可以单步执行代码,但是任何尝试访问 request.Headers
字典中的条目的函数都不会执行并产生错误(下面的屏幕截图)。
这是代码。如果 req.Headers
引用存在,调试器将不会进入 GetJwtFromHeader
函数:
[FunctionName("HttpAuth")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ExecutionContext context,
ILogger log)
{
SomeFunction();
var jwt = GetJwtFromHeader(req);
}
private string GetJwtFromHeader(HttpRequest req)
{
var authorizationHeader = req.Headers?["Authorization"];
string[] parts = authorizationHeader?.ToString().Split(null) ?? new string[0];
return (parts.Length == 2 && parts[0].Equals("Bearer")) ? parts[1] : string.Empty;
}
调试器从不进入GetJwtFromHeader
函数。如果我删除对 req.Headers 的引用,则调试器将进入它。似乎任何试图通过代码访问 Header 字典的函数都找不到它。但是,如果我检查手表 window 中的 object,我会看到正确的值。
这可能是我的包中的版本控制问题吗?我尝试安装不同版本的 Microsof.Extensions.Primitives
但我在降级到 5.0 以下时遇到问题。为什么我的 Header 字典有问题?
我找到问题了。在我正在导入的项目中,我使用 Microsoft.Extensions.Configuration 从我的秘密中读取条目,由于某种原因,版本 5.0.0 在我的 Azure 函数项目中运行不佳。我将其降级为 3.1.13 并且有效。