2010-06-19 35 views
1

問題:在ASP.NET MVC2中相當於的基類頁面類?從web表單背景的

我有一個web表單的應用程序,每一個頁面從BasePage.cs繼承 我也有另一個類AuthenticatedBasePage.cs從BasePage.cs繼承

BasePage.cs有一些代碼,用於查找是否設置了表單身份驗證cookie,如果是,則設置IsAuthenticated布爾標誌和MyAppUser對象(僅包含名稱,年齡,gendery等屬性),這意味着網站上的每個頁面都可以查看用戶查看該頁面是否被登錄,如果是,請閱讀MyAppUser的值。

AuthenticatedBasePage有一個額外的功能,如果任何人試圖瀏覽到從這個類繼承的頁面沒有通過身份驗證,他們被重定向到與'returnurl'查詢字符串變量設置的登錄頁面。

我想在我的MVC2應用程序中有類似的設置。我已經做了一些閱讀,說我不應該在我的BaseController.cs(我的所有控制器都繼承自它)中引用HttpContext,因爲這意味着我不能單元測試它。我的第一個問題是,我如何讓每個頁面都可以使用IsAuthenticated和MyAppUser對象?其次,如何創建只有經過身份驗證的用戶才能訪問的頁面,如果未經過身份驗證,他們會被重定向到使用returnurl querystring變量設置的登錄頁面?

非常感謝, A.

附:我沒有使用MembershipSchema,我只使用FormsAuthentication.SetCookie方法。

回答

0

你想要的是Authorize屬性。 This article對如何使用它與表單身份驗證有很好的解釋。

+0

嗨,我已經看到了授權屬性,但它並沒有完全做我想做的事情。例如,如果我網站上有用戶個人資料頁面,如果當前登錄用戶正在查看他們自己的用戶個人資料,我想要一個「編輯」按鈕。在視圖中,我想訪問<%= CurrentUser.UserId%>或類似的東西。使用webforms BasePage類使這很簡單,但我不太清楚如何在MVC2中複製此行爲。我最好的努力包括創建一個具有CurrentUser屬性的BaseViewModel,我在控制器操作中手動設置該屬性。 – romiem 2010-06-20 22:59:03

+0

有兩個動作,PublicProfile和Profile。如果需要,他們仍然可以使用相同的觀點。 – s1mm0t 2010-06-21 13:23:13