最近在學Aspnetcore,由於新學,加上AspNetCore不斷更新換代,碰到的問題百度查來的大多是舊答案,解決不了老問題。因爲老問題常被新的更安全更快速的方案所替代,也常常刪除或替換掉了老的解決方案。
AspNetCore有容易的地方,有易用的地方,也有高深難用的地方。
有這樣一個需求,用戶用賬號登錄,然後在網頁上顯示用戶的姓名或暱稱,也就是我要顯示DisplayName,而不是UserName。
就如標題所言,這個問題雖然最後解決起來也就加2行改動1處,但是這個答案卻不是我網上查到的,是通過不斷思索、不斷測試後的結果。
通過查詢,有3種解決方案:
1、大多推薦使用Session。對於3.1版本來說,不OK!!!我是說老的寫法是不行的,它有新方案,具體怎麼弄現在真不知道。不信的話就查一下它的方法,已經沒有了Session.SetString(),也沒有Session["Key"]取值。
2、ViewData["DisplayName"],用這個難道需要每個頁面都設置一下嗎?
3、直接用中文UserName。User.Identity.Name顯示的就是UserName,那麼我們不如直接用中文賬號好了。如何用中文賬號請參考:https://www.jianshu.com/p/5f85aab34407 雖然有點麻煩,但也就麻煩一次,也不算什麼。但真用中文賬號嗎?可以但不推薦。
其實解決起來很容易,在 _LoginPartial.cshtml 分部頁上加上兩句,改動一處,如下:
{
var user = await UserManager.GetUserAsync(User);
ViewData["displayName"] = user.DisplayName;
<li class="nav-item">
<a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @ViewData["displayName"]!</a>
</li>