Azure Function v3 - 在启动中添加身份时“无法访问 Azure Functions 运行时”

Mat*_*eru 4 azure asp.net-core azure-functions

我有一个Azure Function (v3)必须与数据库以及用户管理交互的程序。它具有一个依赖项,该项目也包含 DAL,因此所有上下文配置。当我在函数的启动中添加依赖项并将DbContext其部署在 Azure 上时,没有任何问题。除了DbContext我还添加Identity并重新部署之外,门户显示“Azure Functions 运行时无法访问”。

这是函数Startup.cs

[assembly: FunctionsStartup(typeof(Directio.PeopleSee.OrderSynchronizer.Startup))]

namespace Directio.PeopleSee.OrderSynchronizer
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddHttpClient();

            builder.Services.AddDbContext<DBContext>(options1 =>
            {
                options1.UseLazyLoadingProxies(false);
                options1.UseSqlServer(Environment.GetEnvironmentVariable("DBConnectionString"), builder =>
                {
                    builder.CommandTimeout(10);
                }
                );
            })
            .AddIdentity<AspNetUser, AspNetRole>(opt =>
             {
                 opt.Password.RequireDigit = false;
                 opt.Password.RequireLowercase = false;
                 opt.Password.RequireNonAlphanumeric = false;
                 opt.Password.RequireUppercase = false;
                 opt.Password.RequiredLength = 0;
                 opt.Password.RequiredUniqueChars = 0;
                 opt.User.RequireUniqueEmail = false;
                 opt.SignIn.RequireConfirmedEmail = false;
                 opt.SignIn.RequireConfirmedAccount = false;
                 opt.SignIn.RequireConfirmedPhoneNumber = false;
             })
            .AddEntityFrameworkStores<DBContext>()
            .AddDefaultTokenProviders();

            builder.Services.AddOptions<FunctionAppSettings>().Configure<IConfiguration>((settings, configuration) => configuration.GetSection("FunctionAppSettings").Bind(settings));

            builder.Services.AddScoped<IUnitOfWork, UnitOfWork>();
            builder.Services.AddScoped<IUserService, UserServiceImpl>();
            builder.Services.AddScoped<IRoleService, RoleServiceImpl>();
            builder.Services.AddScoped<ISubscribersService, SubscriberServiceImpl>();
            builder.Services.AddScoped<IOrdersService, OrdersService>();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所有服务注册都来自依赖项链接到的项目。该函数作为netcore3.1一个框架,部署在 Azure Func 应用程序中,采用即用即付计划、Windows 服务器,而不是 Docker 容器。

可能是什么问题呢?

Art*_*nez 5

添加身份时,您还添加了 AspNetCore 身份验证依赖项。由于某种原因,Functions 主机会检查您的应用程序中是否存在这些依赖项,并阻止主机模块添加允许门户访问项目中的函数的内置身份验证方案。

如果您仍然想在启动时加载身份组件,我鼓励您查看https://www.nuget.org/packages/DarkLoop.Azure.Functions.Authorize

这是一篇描述其工作原理的帖子:https ://blog.darkloop.com/post/functionauthorize-for-azure-functions-v3

你可以打电话

builder.AddAuthentication();
builder.AddAuthorization();
// or
builder.Services.AddFunctionsAuthentication();
builder.Services.AddFunctionsAuthorization();
Run Code Online (Sandbox Code Playgroud)

此调用强制加载内置身份验证功能,并允许您添加更多身份验证依赖项和方案。

拨打此电话后,您可以拨打电话AddDbContext<...AddIdentity<...

Azure 门户应该能够获取有关您的功能所需的所有信息。