2

我正在实现一个自定义 ASP.NET 角色提供程序,我想知道如果传入的用户已经在传入的角色中,它的AddUsersToRoles方法是否应该抛出一个。默认的 Microsoft SQL Server 角色提供程序会表现出这种行为,即使微软官方文档不推荐它:ProviderExceptionSqlRoleProvider

异常详细信息:System.Configuration.Provider.ProviderException:用户“myTestUser”已经在角色“myTestRole”中。

我认为我的提供者在这种情况下不抛出异常而只是在给定用户已经处于给定角色时继续前进会很有用;这样调用代码就不需要担心重复了。但是,在这种情况下,是否存在依赖于抛出异常的现有角色提供程序使用代码?如果有,是否应该这样做,因为微软自己似乎并不推荐它?

如果我确实想实现一个类似于AddUsersToRoles在用户已经处于角色时不会引发异常的方法,我可以看到 3 种替代方法:

  1. 将其实现为AddUsersToRoles并且具有与默认不同的行为SqlRoleProvider
  2. EnsureUsersInRoles在我的角色提供者类中将其实现为新方法,并使用((MyProvider)(Roles.Provider)).EnsureUsersInRoles().
  3. 只需在一个完全独立的类中实现它。
4

2 回答 2

0

就个人而言,我会遵守微软的做法。很难排除某个地方确实需要抛出该异常的可能性。

于 2013-02-12T17:08:03.343 回答
0

我最终走上了我在问题中提出的路线 2);我RoleProvider还用一些额外的方法实现了 a ,然后使用强制((MyProvider)(Roles.Provider))转换来访问我的额外方法,其中之一是EnsureUsersInRoles(),它具有我的调用代码想要的非抛出异常的功能。

于 2013-02-14T19:15:57.597 回答