在web.config中设置自定义成员资格的此代码是否正确

时间:2013-09-25 17:38:49

标签: asp.net web-applications web-config membership

我想使用自定义成员资格和自定义角色提供程序。我有这个课程:

public class CustomRoleProvider : RoleProvider
{
//override methods
}

public class CustomMembershipProvider : MembershipProvider
{
//override methods
}

我想设置web.config,这段代码是否正确?

<membership defaultProvider="CustomMembershipProvider">
  <providers>
    <clear />
    <add name="CustomMembershipProvider" type="Login1.Code.CustomMembershipProvider, Login1, Version=1.0.0.0, Culture=neutral" connectionStringName="LoginDB1Entities" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>

<roleManager enabled="true" defaultProvider="CustomRoleProvider">
  <providers>
    <clear />
    <add name="CustomRoleProvider" type="Login1.Code.CustomRoleProvider" connectionStringName="LoginDB1Entities" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" writeExceptionsToEventLog="false" />
  </providers>
</roleManager>

因为当我转到ASP.NET配置和安全性选项卡时,却收到此消息:

您选择的数据存储存在问题。这可能是由无效的服务器名称或凭据或权限不足引起的。它也可能是由未启用角色管理器功能引起的。单击下面的按钮可重定向到可以选择新数据存储的页面。 以下消息可能有助于诊断问题:未实现方法或操作。

2 个答案:

答案 0 :(得分:1)

此处的问题似乎源于您的connectionStringName属性。

确保在Web.config的<connectionStrings>部分

中定义/添加连接字符串
<connectionStrings> 
<add name="LoginDB1Entities" ... />
</connectionStrings>

此外,如果你已经如上所述添加,那么请确保使用正确的设置。

首先检查数据库的确切位置?找出SQL Server的哪个实例是您的应用程序的数据库。修改连接字符串以指向该实例。

答案 1 :(得分:0)

  

未实施方法或操作

如果您在没有任何参数的情况下抛出NotImplementedException,这就是获取消息。

最明显的原因是您的某个自定义提供程序尚未实现其中一种预期方法。如果你能得到一个堆栈跟踪,你会看到哪一个。

更新以回应评论:

  

我的自定义会员资格正在网站

成员资格和角色提供程序包含两个用途的方法:

  • 运行时验证(MembershipProvider)和授权(RoleProvider)所需的方法。例如,在运行时,RoleProvider仅使用方法IsUserInRoleGetRolesForUser

  • 管理用户(MembershipProvider)和角色/角色成员资格(RoleProvider)所需的方法。如果要使用“ASP.NET配置和安全性”选项卡管理提供程序的数据存储,则需要使用这些方法。

创建仅提供运行时功能的提供程序(所谓的“只读”提供程序)是完全有效的,在这种情况下,您必须提供一些其他外部机制来管理提供程序的数据存储。例如,WindowsTokenRoleProvider是一个只读提供者。但是,如果这样做,您将无法使用“ASP.NET配置和安全性”选项卡管理提供者存储。

您似乎未能实施一种或多种管理方法,而是投掷NotImplementedException

顺便说一句,NotImplementedException不是抛弃readonly提供程序中不受支持的方法的最佳例外。它通常只用于表示尚未在正在开发的版本中实现某个方法。

如果您不打算实施该方法,最好抛出NotSupportedException - 或者在提供者的情况下,可能是ProviderException