加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 09:45:54 所属栏目:asp.Net 来源:网络整理
导读:在我的asp.net应用程序管理功能中,我正在尝试组合AD身份验证和表单授权来创建用户,角色和将用户分配给角色等.我已在我的web.config中配置MembershipADProvider和AspNetSqlMembershipProvider,并将MembershipADProvider作为默认值.用户使用AD身份验证登录后,
在我的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 = users;
????????????????????ddlUsers.DataBind();
????????????????????打破;
????????????????}
????????????}

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

>我无法使用值设置Membership.Provider
Membership.Providers [“AspNetSqlMembershipProvider”]作为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也有助于保持代码可测试性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读