而不是在代碼中捕獲「未授權」事件,我建議你去自定義錯誤。當用戶被重定向到拒絕訪問頁面時,SharePoint實際上會拋出錯誤代碼爲「401」(未經授權)。
在您的web.config中,您可以配置應用程序的401錯誤行爲。如果您曾經在網絡應用程序上完成過自定義錯誤頁面,那就是一回事。尋找你的web.config中CustomError節點,並修改它是這樣的:
<customErrors mode="On" defaultRedirect="~/_layouts/CustomErrorPage.aspx">
<error statusCode="401" redirect="~/_layouts/AccessDeniedPage.aspx" />
</customErrors>
然後創建CustomErrorPage.aspx和你AccessDeniedPage.aspx並將其部署到12個蜂箱。
在這些頁面背後的代碼,您可以覆蓋pageLoad的事件重定向它們無論你想:
protected void Page_Load(object sender, EventArgs e)
{
bool isLogged = HttpContext.Current.User.Identity.IsAuthenticated;
Response.Redirect("wherever");
}
注意,在這一點上,你仍然有機會獲得SPContext對象,如果您需要它(並且我假設你將要根據用戶的組成員身份編寫特定的代碼)。
這不是SharePoint的特定行爲。所有ASP.NET應用程序都是這樣工作的使用站點範圍的配置將允許您僅在需要運行時(即拒絕訪問時)運行代碼,而不是檢查每個頁面加載或其他類似的權限。