国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

解析Asp.net Core中使用Session的方法

2024-07-10 13:31:54
字體:
來源:轉載
供稿:網友

前言

2017年就這么悄無聲息的開始了,2017年對我來說又是特別重要的一年。

元旦放假在家寫了個Asp.net Core驗證碼登錄, 做demo的過程中遇到兩個小問題,第一是在Asp.net Core中引用dll,以往我們引用DLL都是直接引用,在Core里這樣是不行的,必須基于NuGet添加,或者基于project.json添加,然后保存VS會啟動還原類庫。

第二就是使用Session的問題,Core里使用Session需要添加Session類庫。

添加Session

在你的項目上基于NuGet添加:Microsoft.AspNetCore.Session

修改startup.cs

在startup.cs找到方法ConfigureServices(IServiceCollection services) 注入Session(這個地方是Asp.net Core pipeline):services.AddSession();

接下來我們要告訴Asp.net Core使用內存存儲Session數據,在Configure(IApplicationBuilder app,...)中添加代碼:app.UserSession(); 

Session

1、在MVC Controller里使用HttpContext.Session

using Microsoft.AspNetCore.Http;public class HomeController:Controller{   public IActionResult Index()   {       HttpContext.Session.SetString("code","123456");       return View();     }    public IActionResult About()    {       ViewBag.Code=HttpContext.Session.GetString("code");       return View();    }}

2、如果不是在Controller里,你可以注入IHttpContextAccessor

public class SomeOtherClass{   private readonly IHttpContextAccessor _httpContextAccessor;   private ISession _session=> _httpContextAccessor.HttpContext.Session;   public SomeOtherClass(IHttpContextAccessor httpContextAccessor)   {      _httpContextAccessor=httpContextAccessor;          }   public void Set()   {     _session.SetString("code","123456");   }     public void Get()  {     string code = _session.GetString("code");   }}

存儲復雜對象

存儲對象時把對象序列化成一個json字符串存儲。

public static class SessionExtensions{   public static void SetObjectAsJson(this ISession session, string key, object value)  {    session.SetString(key, JsonConvert.SerializeObject(value));  }  public static T GetObjectFromJson<T>(this ISession session, string key)  {    var value = session.GetString(key);    return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);  }}
var myComplexObject = new MyClass();HttpContext.Session.SetObjectAsJson("Test", myComplexObject);var myComplexObject = HttpContext.Session.GetObjectFromJson<MyClass>("Test");

使用SQL Server或Redis存儲

1、SQL Server

添加引用  "Microsoft.Extensions.Caching.SqlServer": "1.0.0"

注入:

// Microsoft SQL Server implementation of IDistributedCache.// Note that this would require setting up the session state database.services.AddSqlServerCache(o =>{  o.ConnectionString = "Server=.;Database=ASPNET5SessionState;Trusted_Connection=True;";  o.SchemaName = "dbo";  o.TableName = "Sessions";});

2、Redis

添加引用   "Microsoft.Extensions.Caching.Redis": "1.0.0"

注入:

// Redis implementation of IDistributedCache.// This will override any previously registered IDistributedCache service.services.AddSingleton<IDistributedCache, RedisCache>();

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳原县| 祥云县| 崇文区| 融水| 胶州市| 广宁县| 淳安县| 壶关县| 遵义市| 图片| 灵宝市| 绿春县| 佳木斯市| 虹口区| 乐昌市| 自治县| 五常市| 融水| 瓮安县| 普陀区| 胶南市| 顺昌县| 定西市| 丰城市| 顺昌县| 牡丹江市| 大洼县| 白山市| 西丰县| 县级市| 禹州市| 呼和浩特市| 太白县| 阿图什市| 礼泉县| 南充市| 东阿县| 南陵县| 正镶白旗| 大化| 会同县|