1

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

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 配置和安全选项卡时,却收到以下消息:

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

4

2 回答 2

1

这里的问题似乎源于您的connectionStringName财产。

确保在 Web.config<connectionStrings> 部分定义/添加连接字符串

<connectionStrings> 
<add name="LoginDB1Entities" ... />
</connectionStrings>

此外,如果您已经按上述方式添加,请确保您使用的是正确的设置。

首先检查您的数据库到底在哪里?找出 SQL Server 的哪个实例是您的应用程序使用的数据库。修改连接字符串以指向该实例。

于 2013-09-26T06:32:36.263 回答
0

方法或操作未实现

如果你在NotImplementedException没有任何参数的情况下抛出,这是得到的消息。

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

更新 以回应评论:

我的自定义会员在网站上工作

成员资格和角色提供者包含用于两个目的的方法:

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

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

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

您似乎未能实施一种或多种管理方法,而是抛出NotImplementedException.

顺便说一句,NotImplementedException对于只读提供程序中不受支持的方法,这并不是最好的异常。它通常只应用于指示尚未在正在开发的版本中实现的方法。

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

于 2013-09-26T06:48:14.300 回答