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 并且有效。