国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台湾省| 奇台县| 汽车| 武城县| 吕梁市| 麻栗坡县| 清远市| 博客| 沧源| 新平| 苗栗县| 苏尼特左旗| 柞水县| 东阿县| 舞钢市| 青田县| 兴和县| 承德市| 兴业县| 安泽县| 商洛市| 泰州市| 平利县| 遂川县| 台江县| 怀来县| 诸城市| 永靖县| 曲周县| 汤原县| 开化县| 林甸县| 古丈县| 香格里拉县| 沽源县| 大方县| 报价| 伊宁县| 卓尼县| 历史| 阿图什市|