2

在运行一个名为“Test”的天蓝色函数后,我遇到了上述错误,该函数重定向到我们要使用的服务的外部 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, "get", "post", 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 函数被命中,但在控制台中产生以下错误: 在此处输入图像描述

这些是当前项目对解决方案的依赖项(设置为启动项目): 这些是我的部门

我已经尝试在当前项目中安装 Microsoft.Extensions.Primitives 的最新稳定版本(5.0.0)和之前的版本(3.1.13),但我仍然遇到同样的错误。我注意到无法加载的包在 microsoft.azure.webjobs (3.0.23) 中,在 microsoft.azure.webjobs.extensions.storage (4.0.4) 中,但这些在另一个项目中使用完全,对于另一个天蓝色函数(blob触发)。关于如何克服这个错误的任何想法?谢谢你们。

4

1 回答 1

4

适用于 .NET Core 3 的 Azure Functions 主机使用进程内托管模型,这实质上意味着您可以使用的 Microsoft 程序集版本受到限制。发生的情况是您的项目中的某些内容引用了较新版本的Microsoft.Extensions.Primitives,但该库的较旧版本已由 Azure Functions 主机应用程序加载。

对于 Azure Functions .NET Core 3,应将所有Microsoft.Extensions.*库限制为 v3.x。您当前有Microsoft.Extensions.DependencyInjection5.0.1,应该更改为 3.x。检查级别或下方的任何其他Microsoft.Extensions.*库(提示:您可以通过输入解决方案资源管理器顶部的输入框Packages快速找到它们)。Microsoft.Extensions您可能需要降级其他一些具有Microsoft.Extensions.Primitives依赖项的库。

也许还可以手动编写bindingRedirect将新版本指向旧版本的方法。这些Microsoft.Extensions.*软件包在不同版本之间相对稳定,因此可能会起作用。不过,这会让我非常紧张。

于 2021-03-30T11:00:46.043 回答