博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net core 缓存和Session
阅读量:5996 次
发布时间:2019-06-20

本文共 3108 字,大约阅读时间需要 10 分钟。

缓存

缓存在内存中 ASP.NET Core

使用 IMemoryCache内存中缓存是使用依赖关系注入从应用中引用的服务。 请在ConfigureServices中调用AddMemoryCache():

public class Startup{    public void ConfigureServices(IServiceCollection services)    {        services.AddMemoryCache();        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);    }    public void Configure(IApplicationBuilder app)    {        app.UseMvcWithDefaultRoute();    }}

在构造函数中请求 IMemoryCache实例:

public class HomeController : Controller    {        private IMemoryCache cache;        public HomeController(IMemoryCache cache)        {             this.cache = cache;        }        public IActionResult Index()        {            cache.Set("name", $"shijia{DateTime.Now}", TimeSpan.FromSeconds(10));            return View();        }        public IActionResult About()        {            object result;            string value = cache.TryGetValue("name", out result) ? $"获取缓存name{result}" : "获取缓存失败";            return Content(value);        }

196558-20181203000445887-1960058241.gif

资料:

分布式缓存

Session

要添加对Session支持,否则会报错Session has not been configured for this

application or request。使用方法

(1)nuget安装Microsoft.AspNetCore.Session

(2) ConfigureServices中services.AddSession();
(3)Configure中app.UseSession();
(4)TempData依赖于Session,所以也要配置Session。
(5)HttpContext.Session,但是原始只有void Set(string key, byte[] value)bool TryGetValue(string key, out byte[] value)这两个方法。如果using Microsoft.AspNetCore.Http;(需要安装Microsoft.AspNetCore.Http.Extensions)还可以使用SessionExtensions中的值是int、string类型的,其他类型只能自己使用json进行序列化处理。
(6)推荐使用redis做进程外session:

196558-20181203015314522-1296258408.png

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");     }}

资料:ASP.NET Core 中的会话和应用状态

问题:

Session 保存之后取不到值的解决方案

解决方案:

注释掉下面这段:

public void ConfigureServices(IServiceCollection services)        {//            services.Configure
(options =>// {// // This lambda determines whether user consent for non-essential cookies is needed for a given request.// options.CheckConsentNeeded = context => true;// options.MinimumSameSitePolicy = SameSiteMode.None;// }); services.AddMemoryCache(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddSession(); }

转载地址:http://unqlx.baihongyu.com/

你可能感兴趣的文章
SQL Server 2016:内存列存储索引
查看>>
立项申请书模板
查看>>
C#提高知识 ADO.NET实体数据模型(1)
查看>>
送给那些搞电脑维修的人儿
查看>>
Exchange Server 2013预览版服务器角色概况
查看>>
IPSec ***和SSL ***两种***的安全风险比较
查看>>
Hadoop入门扫盲:hadoop发行版介绍与选择
查看>>
实战1:创建Windows Server 2008域
查看>>
在 Windows 2012 R2 安装 SharePoint 2013
查看>>
《统一沟通-微软-实战》-6-部署-5-边缘服务器-2012-07-12-3
查看>>
红帽转型为云计算解决方案提供商
查看>>
疯狂ios之cocos2d中的文本
查看>>
Mac下通过 brew 安装不同版本的php
查看>>
云在天之南——我的七天七夜(率性苍山洱海)
查看>>
如何迅速入门Shell 编程
查看>>
Linux企业应用微博客正式开通
查看>>
64位linux下的gns3网络模拟器配置
查看>>
效果差学费贵售后难,VIPKID米雯娟的野心不能只靠“烧钱”营销
查看>>
Windows Server 2012 R2 WSUS-10:流程概述
查看>>
自动发现服务是怎样工作的?
查看>>