我正在實現一個自定義ASP.NET角色提供程序,我想知道如果用戶傳入的用戶已經在傳入的角色中,它的AddUsersToRoles
方法是否應該拋出ProviderException
。默認的Microsoft SQL Server角色提供程序SqlRoleProvider
會顯示此行爲,即使official Microsoft documentation不推薦它:我的自定義RoleProvider應該在AddUsersToRoles中引發異常嗎?
異常詳細信息:System.Configuration.Provider.ProviderException:用戶「myTestUser」已經在角色「myTestRole」。
我認爲這對我的提供者不會在這種情況下拋出異常是有用的,但只是在給定用戶已經在給定的角色時繼續前進;這樣的調用代碼不需要擔心重複。但是,在這種情況下是否會存在依賴於異常的現有角色提供程序使用代碼?如果有的話,是否應該這樣做,因爲微軟自己似乎不推薦它?
如果我要實現類似AddUsersToRoles
的方法,當用戶已經在一個角色不拋出異常,我可以看到3個備選方案:
- 實現它爲
AddUsersToRoles
,只是有與默認SqlRoleProvider
不同的行爲。 - 在我的角色提供者類中將其作爲新的
EnsureUsersInRoles
方法實現,並使用((MyProvider)(Roles.Provider)).EnsureUsersInRoles()
從我的調用代碼中訪問它。 - 只需在一個完全獨立的類中實現它。
那麼如果能夠打電話我可以使用它不會拋出異常? – Jez 2013-02-12 20:53:35
我在想這個。儘管我同意預先檢查你的用戶是否已經在角色中是額外的工作,但我認爲MS中的模式非常清晰:「AddWhatever」如果無法添加,則會引發錯誤。反思我認爲這很好,因爲至少你知道你在哪裏,而不像「沉默失敗」,這可能是因爲該項目已被添加,但可能是因爲某些事情是錯誤的。 (請參閱下一條評論) – 2013-02-12 21:03:20
如果您需要添加某種方法(如果丟失了某些內容但未拋出異常),請考慮調用該方法「EnsureUsersInRoles」。這樣你就可以得到你想要的行爲,但不會引入打破現有模式的方法。 – 2013-02-12 21:04:20