我的自定义RoleProvider应该在AddUsersToRoles中抛出异常吗?

时间:2013-02-12 15:56:34

标签: asp.net exception roleprovider

我正在实现一个自定义ASP.NET角色提供程序,我想知道如果传入的用户已经在传入的角色中,它的AddUsersToRoles方法是否应抛出ProviderException。默认Microsoft SQL Server角色提供程序SqlRoleProvider表现出此行为,即使official Microsoft documentation不推荐它:

  

异常详细信息:System.Configuration.Provider.ProviderException:用户'myTestUser'已经处于角色'myTestRole'。

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

如果我确实想要实现一个类似于AddUsersToRoles的方法,当用户已经在角色中时不会抛出异常,我可以看到3个替代方案:

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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