我正在实现一个自定义ASP.NET角色提供程序,我想知道如果传入的用户已经在传入的角色中,它的AddUsersToRoles
方法是否应抛出ProviderException
。默认Microsoft SQL Server角色提供程序SqlRoleProvider
表现出此行为,即使official Microsoft documentation不推荐它:
异常详细信息:System.Configuration.Provider.ProviderException:用户'myTestUser'已经处于角色'myTestRole'。
我认为我的提供者在这种情况下不会抛出异常,但只是在给定用户已经处于给定角色时继续前进;这样调用代码不需要担心重复。但是,是否存在依赖于在这种情况下抛出异常的现有角色提供者使用代码?如果存在,是否应该这样做,因为微软自己似乎不推荐它?
如果我确实想要实现一个类似于AddUsersToRoles
的方法,当用户已经在角色中时不会抛出异常,我可以看到3个替代方案:
AddUsersToRoles
,并且与默认SqlRoleProvider
具有不同的行为。EnsureUsersInRoles
方法,并使用((MyProvider)(Roles.Provider)).EnsureUsersInRoles()
从我的调用代码中访问它。答案 0 :(得分:0)
就个人而言,我会遵循微软的做法。很难排除某个地方确实需要抛出异常的可能性。
答案 1 :(得分:0)
我最后走的路线2)我在我的问题中提出了这个问题;我还使用其他一些方法实现了RoleProvider
,然后使用强制转换((MyProvider)(Roles.Provider))
来访问我的其他方法,其中一个方法是EnsureUsersInRoles()
,它具有非异常 - 抛出我的调用代码所需的功能。