我正在.NET 4.6,MVC 5上構建一個新站點。我想爲用戶使用相同的路由,無論他們是否已登錄,但我希望他們在註銷時看到主頁並在登錄時查看他們的個人內容。Facebook就是這樣一個例子 - 無論您是否登錄,Facebook的URL都是facebook.com
。使用相同的路由,但爲已驗證/未驗證的用戶顯示不同的內容
我很喜歡使用任何必需的方法,但我不確定如何最好地完成此操作。
我正在.NET 4.6,MVC 5上構建一個新站點。我想爲用戶使用相同的路由,無論他們是否已登錄,但我希望他們在註銷時看到主頁並在登錄時查看他們的個人內容。Facebook就是這樣一個例子 - 無論您是否登錄,Facebook的URL都是facebook.com
。使用相同的路由,但爲已驗證/未驗證的用戶顯示不同的內容
我很喜歡使用任何必需的方法,但我不確定如何最好地完成此操作。
根據用戶是否通過身份驗證提供模型數據。你可以很容易地檢查這個
this.User.Identity.IsAuthenticated
根據這個你有條件地建立視圖內容,甚至渲染一些局部視圖,例如,
// controller
model.ShowSomething = this.User.Identity.IsAuthenticated;
然後
@* view *@
@if (Model.ShowSometing) {
Html.Partial(something that only authenticated users will see)
}
記住你的行動應該是匿名用戶(沒有Authorize
屬性)訪問。
對於內容要在每一頁上,比如只顯示某些導航欄鏈接到這些登錄,您可以將認證檢查直接在您的佈局來看,類似如下:
@if (Request.IsAuthenticated)
{
//only logged in users see this -- perhaps nav bar links or other site-wide content
}
您也可以創建一個角色或權限提供者,以便您可以更好地控制基於角色等在頁面上顯示的部分。然後執行與上述相同的操作,並根據用戶角色檢查用戶是否被允許,等等。這對於僅顯示基於他們所處角色的添加或編輯按鈕來說很好。類似於:
@if (Request.IsAuthenticated && User.IsInRole("Admin"))
{
//only logged in users see this who are in the admin role
}
當然,如果您在視圖中做了太多這樣的操作,那麼您可能會感到混亂,因此如上所述的Wiktor Zychla,您也可以在模型中添加這些屬性,然後僅在視圖中引用模型。
但是對於網站範圍內的內容(例如,在佈局文件中有條件地顯示導航欄鏈接),引用視圖中的請求或用戶將執行此操作。
如果用戶通過身份驗證,返回視圖(「A」,feedModel)'else'返回View()' – Shyju
@Shyju沒有比將所有視圖和邏輯混合在一起更好的方法嗎? – vaindil