我正在构建一个带有 http 触发器的 Azure Functions v3 .NET Core 3.1 应用程序。我创建了从请求的 Authorization 标头中检索 jwt 并使用JwtSecurityTokenHandler
. 如果我创建一个从 FunctionsStartup 继承的启动类,这将起作用。但是,如果我从 WebJobStartup 继承,我会遇到错误。应用找不到Microsoft.Extensions.Primitives.StringValues Microsoft.AspNetCore.Http.IHeaderDictionary.get_Item
。我可以单步执行代码,但是任何尝试访问request.Headers
字典中条目的函数都不会被执行并产生错误(下面的屏幕截图)。
这是代码。如果引用存在,调试器将不会进入GetJwtFromHeader
函数:req.Headers
[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 字典的函数都找不到它。但是,如果我在监视窗口中检查对象,我会看到正确的值。
这可能是我的包中的版本控制问题吗?我尝试安装其他版本,Microsof.Extensions.Primitives
但在降级到 5.0 以下的版本时遇到问题。为什么我的 Header 字典有问题?