簡體   English   中英

在asp.net MVC3網頁中的經過身份驗證的視圖和匿名視圖之間切換的最佳方法是什么?

[英]What is the best way to switch between authenticated and anonymous views in asp.net MVC3 web pages?

我已經使用MVC3了一段時間,我正在考慮把我現在已經學會使用的東西,並使用它來敲一個真正的項目,但是有一件我從未真正清楚地解釋過或展示過的東西希望我能從社區獲得一些關於此主題的反饋。 問題是,當您的頁面可以根據訪問者是否通過身份驗證而處於兩種狀態時,我應該使用什么技術在兩種狀態之間切換? 每個頁面應該具有兩個完全獨立的視圖以及兩個視圖共有的共享模型,還是最好使用部分視圖來控制登錄元素或匿名元素之間的差異? 還是最好有兩個不同的模型和兩個不同的視圖,然后在控制器階段在它們之間切換?

我可以看到很多的,我可以實現它不同的方式,但我從來沒有真正看到的繞了一個最佳實踐方式的任何實例或建議,我還沒有建立一個項目足夠大,還沒有作為一個實驗室找出困難的方法,盡管那是我要着手的。

有沒有人能講述自己的經歷的故事? 甚至“不要這樣做”也將有助於減少某些選擇。

我問的原因是,我想創建一個在您登錄並注冊之前不會完全癱瘓的網站,當您不經過注冊過程就無法訪問網站主頁時,它會讓我發瘋。我希望能夠提供每個頁面的“精簡版”版本,而不包含用戶特定的內容,即使訪問者尚未通過身份驗證,然后在他們登錄時向頁面添加額外的功能。

我可以看到同一主題上的其他問題,但是它們似乎都與iOS開發有關,因此如果以前曾問過這個問題,我深表歉意,但我看不到任何答案。

感謝您提供反饋,我很想聽聽對別人有用的東西,對其他人無效的東西。

編輯:提出問題的一種不太含糊的方法。

在我的主頁上,我在右上角有一個用戶名/密碼框,其中有一個“登錄”按鈕,並且在主頁中間有一段文本。 當用戶輸入用戶名和密碼並點擊提交時,我希望該“登錄”控件更改為“歡迎使用:{username}”消息和一個注銷按鈕,並且希望主頁上的文本段落切換為“已驗證” “ 信息。 我不知道要在哪里對頁面結構進行這些更改,這是兩個視圖嗎? Authenticated_Homepage和Anonymous_Homepage,它們共享一個模型還是只擁有一個主頁視圖並為更改的部分使用部分視圖,還是使用控制器上的角色返回不同的視圖?

說實話,只是不知道要使用哪些工具。

那不是兩個觀點。 MVC通常實際上在Action方法級別使用身份驗證/授權。 但是在您的情況下,您可以在View代碼中執行以下操作:

@if(Request.IsAuthenticated) {
    <text>Welcome <strong>@User.Identity.Name</strong>!
    [ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
}
else {
    @:[ @Html.ActionLink("Log On", "LogOn", "Account") ]
}

這是直接從MVC 3模板中提取的。 在這種情況下,這是在_Layout.cshtml共享視圖上呈現的部分視圖代碼。 這樣,它將在每個頁面上呈現(如果您來自WebForms背景,則將_Layout視為“母版頁”)。

Partial View代碼所做的所有工作都是針對經過身份驗證的用戶進行測試。 如果它是經過身份驗證的用戶,則顯示歡迎消息。 如果不是 ,則有一個ActionLink()可以進入Login Action方法以具有授權能力。

通常,盡管您將限制/允許用戶/角色使用某些操作方法,但這是您要執行的操作:

 public ActionResult EverybodyCanAccess()
 {
     return View();
 }

 [Authorize]
 public ActionResult OnlyAuthenticatedUsersCanAccess()
 {
     return View();
 }

 [Authorize(Roles = "Admin")]
 public ActionResult OnlyAdminsCanAccess()
 {
     return View();
 }

 [Authorize(Users = "John, Bob")]
 public ActionResult OnlyJohnAndBobCanAccess()
 {
     return View();
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM