问题描述
在运行名为“Test”的 Azure 函数重定向到我们要使用的服务的外部 URL 后,我遇到了上述错误。
[FunctionName("Test")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous,"get","post",Route = null)]HttpRequest req)
{
Log.information("C# HTTP trigger function processed a request.");
string url = _authenticationService.GetAuthorizationUri().ToString();
return new RedirectResult(url);
}
位于 URL 的站点会提示用户授权使用他们的数据,并执行重定向到我们“AuthorizationCallback”之前授权的 URL,以及一个查询字符串参数。
[FunctionName("AuthorizationCallback")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous,Route = null)] HttpRequest req)
{
Log.information("C# HTTP trigger function processed a request.");
string code = req.Query["code"];
try
{
if (!string.IsNullOrEmpty(code))
{
await _authenticationService.ExchangeCodeForAccesstoken(code);
return new OkResult();
}
}
catch (System.Exception)
{
return new UnauthorizedResult();
}
return new NotFoundResult();
}
AuthorizationCallback 函数被命中但在控制台中产生以下错误:
这些是当前项目对解决方案的依赖(设置为启动项目):
我已经尝试在当前项目中安装最新的稳定版本 (5.0.0) 和之前的版本 (3.1.13) Microsoft.Extensions.Primitives,但我仍然遇到相同的错误。我注意到无法加载的包在 microsoft.azure.webjobs (3.0.23) 中,在 microsoft.azure.webjobs.extensions.storage (4.0.4) 中,但这些在 完全是另一个项目,用于另一个 azure 函数(blob 触发)。关于如何克服这个错误的任何想法?谢谢大家。
解决方法
适用于 .NET Core 3 的 Azure Functions 主机使用进程内托管模型,这实质上意味着您可以使用的 Microsoft 程序集版本受到限制。发生的情况是项目中的某些内容引用了较新版本的 Microsoft.Extensions.Primitives
,但 Azure Functions 主机应用程序已加载该库的较旧版本。
对于 Azure Functions .NET Core 3,您应该将所有 Microsoft.Extensions.*
库限制为 v3.x。您当前拥有 Microsoft.Extensions.DependencyInjection
5.0.1,应将其更改为 3.x。检查 Microsoft.Extensions.*
级别或下方任何位置的任何其他 Packages
库(提示:您可以通过将 Microsoft.Extensions
放在解决方案资源管理器顶部的输入框中快速找到它们)。您可能需要降级其他具有 Microsoft.Extensions.Primitives
作为依赖项的库。
您可能还可以通过手动编写一个 bindingRedirect
来将新版本指向旧版本。 Microsoft.Extensions.*
软件包跨版本相对稳定,因此可能会起作用。不过,这会让我非常紧张。