1. 程式人生 > >ASP.NET Core 2.0 MVC

ASP.NET Core 2.0 MVC

 一、前言

  上篇實戰完成後,沒想到會有那麼多的圈友給了那麼多的支援,甚至連只是作為程式碼倉儲的git上也給了一些小星星,真的感覺很惶恐啊,哈哈哈,畢竟程式碼寫的很爛啊。由於上一篇只是大概說了下專案,所以準備寫下這篇詳細說下自己對於獲取當前登入使用者的設計與實現,原本準備上週末就完成的這篇,結果週六一起來,發現自己起水痘了,嗯,很悲催。。。請了一個星期的假,今天好歹頭不痛,不發燒能看電腦了,就努力努力趕出來吧。

  獲取當前登入使用者的整體思路,我們可以通過建立一個靜態的使用者類,儲存當前登入的使用者。通過將屬性值儲存在session中,從而儲存到伺服器的記憶體中,做到可以在系統全域性中獲取當前登入使用者的資料資訊。

  .NET Framework平臺下面的MVC與.NET Core平臺下面的MVC,對於Session的使用上存在著一些的差異,主要在於如何獲取到Session物件。在傳統的MVC專案中我們可以直接使用HttpContext.Current.Session獲取到session,從而做到對於資料的取值、賦值;而在ASP.NET Core MVC中,並沒有HttpContext.Current.Session這個靜態類,通過查閱微軟的文件可知,我們可以通過注入IHttpContextAccessor物件的方式從而獲取到session物件,解決方案如下所示。

 二、使用Session儲存當前登入的使用者資訊

   首先,在ASP.NET Core 中使用Session,我們需要將Session注入到ASP.NET Core的管道(pipeline)中,和我們使用MVC的方式相同,在ConfigureServices(IServiceCollection services)中,新增

1 services.AddSession();

  在Configure(IApplicationBuilder app, IHostingEnvironment env)中新增

1 app.UseSession();

  這樣,我們就可以在MVC中使用到Session了。當然現在也只是能在Controller中獲取到Session物件,如果想在別的類檔案中使用到Session物件,我們需要注入IHttpContextAccessor物件。這裡,我們可以使用nuget新增Microsoft.AspNetCore.Http.Extensions這個程式集,方便我們對於Session進行操作。

  因為我們採用靜態類作為當前登入使用者的載體,而靜態類不能擁有例項建構函式,所以我採用建立一個配置方法來進行注入,CurrentUser類如下所示。

 CurrentUser

   當我們建立好了這樣一個靜態類後,我們就可以在登入成功後,將當前登入的使用者資訊賦值給這個靜態類,這樣我們就可以在需要使用到的地方直接使用CurrentUser這個靜態類即可。在當時實際使用後發現,想要獲取到登入後儲存的使用者資訊,則必須在Controller的構造方法中呼叫CurrentUser的Configure方法,無形中還是增加了許多的工作量。

  Controller的建構函式示例程式碼如下:

 HomeController

  登入成功後給CurrentUser賦值的相關程式碼如下所示:

 SetCurrentUser

  這樣就可以了,當需要使用到當前登入的使用者資訊時,直接CurrentUser.屬性就可以了,整個專案的程式碼還是在專案實戰的那個程式碼倉庫中,地址點後面:原始碼倉儲,歡迎大家提出更好的解決方案啊。

給個 喜 歡, 好!