gpt4 book ai didi

asp.net - 从 AD 成员资格提供程序运行时切换到 SQL 成员资格提供程序

转载 作者:行者123 更新时间:2023-12-01 04:09:22 25 4
gpt4 key购买 nike

在我的 asp.net 应用程序管理功能中,我试图结合 AD 身份验证和表单授权来创建用户、角色和将用户分配给角色等。我在我的 web.config 中配置了 MembershipADProvider 和 AspNetSqlMembershipProvider,并将 MembershipADProvider 作为默认设置。用户使用 AD 身份验证登录后,我需要切换/分配我的成员资格对象以使用 AspNetSqlMembershipProvider,以便从成员资格对象(来自 dbo.aspnet_Users 表)中获取所有用户。如何在运行时切换提供程序?在搜索此问题后,我尝试了不同的方法,但到目前为止,这些方法似乎都不适合我。
以下是我尝试过的几种方法:
1. foreach(MembershipProvider mp in Membership.Providers)
{
if (mp.Name == "MembershipADProvider")
{
Membership.Providers.Remove(MembershipADProvider");
MembershipUserCollection users = Membership.GetAllUsers();
ddlUsers.DataSource = 用户;
ddlUsers.DataBind();
休息;
}
}

Membership.Providers.Remove(MembershipADProvider"); - 不起作用,因为它不受支持..
此外,尝试清除 Membership.Providers,然后仅添加也不支持的 AspNetSqlMembershipProvider 类型。

  • 我无法使用以下值设置 Membership.Provider
    Membership.Providers["AspNetSqlMembershipProvider"] as Membership.Provider 是只读属性。
  • 我试图在 2 个提供程序之间切换连接字符串,这两个提供程序没有切换提供程序,因为两者都是不同类型的提供程序..如果两者都是 sqlserver 提供程序,我相信这会起作用。

  • 请让我知道是否有人成功实现,或者这是否是一种合理的方法。谢谢你!

    最佳答案

    您可以将显式提供程序传递给您的代码,而不是直接依赖 Memebership(它只是包装了在配置中标记为默认的那个)。没有必要在运行时交换它们,想想这会如何影响线程安全。

    所以与其说 Membership.GetAllUsers();你会做类似的事情(我手头没有编译器):

    public UserSerivce : IUserService
    {
    private MembershipProvider provider;

    public UserService(MembershipProvider provider)
    {
    this.provider = provider;
    }

    public IEnumerable<MembershipUser> GetUsers()
    {
    return provider.GetAllUsers();
    }

    public void DoSomethingElseUseful()
    {
    ...
    }

    }

    然后将它用于特定的提供者:
    var service = new UserService(Membership.Providers["mySqlMembershipProvider"]);
    var users = service.GetUsers();

    或者,如果使用 AD 特定代码:
    var service = new UserService(Membership.Providers["myADMembershipProvider"]);
    var users = service.GetUsers();

    以这种方式使用 DI 还有助于保持代码的可测试性。

    关于asp.net - 从 AD 成员资格提供程序运行时切换到 SQL 成员资格提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7210551/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com