我会预先承认,我对提供者的了解仅限于为会员/个人资料/角色编写它们,但一般的东西仍然应该适用:
除非您允许开发人员有机会指定不同的提供程序,否则是的,默认提供程序就是将要使用的提供程序。
因此,以身份验证为例,如果您的 web.config 中有以下内容:
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
<providers>
<remove name="AspNetSqlProvider" />
<add name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SqlServices"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
passwordFormat="Hashed"
applicationName="/" />
<add name="AdProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider" />
</providers>
</membership>
当您在页面的某处添加登录控件时,它将使用 SqlProvider。
您可以通过以下两种方式之一使用不同的提供程序:
- 您可以使用Login 控件的MembershipProvider属性指定不同的提供程序
- 您可以提供在登录控件身份验证事件上调用的方法,您可以在其中选择您的提供程序。
方法 2 的示例是:
private void OnAuthenticate(object sender, AuthenticateEventArgs e){
bool authenticated = false;
MembershipProvider sqlProvider = Membership.Providers["SqlProvider"];
authenticated = sqlProvider.ValidateUser(Login1.UserName, Login1.Password);
if (!authenticated){
// User not found in database, try Active Directory:
MembershipProvider adProvider = Membership.Providers["AdProvider"];
authenticated = adProvider.ValidateUser(Login1.UserName, Login1.Password);
}
e.Authenticated = authenticated;
}
您可以在自己的控件上执行此操作的其他方法是公开 Provider 属性,并检查它是否具有值,并使用该提供程序而不是 defaultProvider。
通常,提供者模型已用于为已知类提供一组默认行为 - 因此成员资格提供者都有(例如)返回MembershipUser的方法GetUser - AspNetSqlMembershipProvider 的 GetUser 实现的全部目的是加载来自 ASP.NET SQL 数据库的 MembershipUser 数据 - 您可以在Sample Membership Provider中看到这一点
我希望这会有所帮助!