asp.net core 缓存和Session

原文: asp.net core 缓存和Session

缓存#

缓存在内存中 ASP.NET Core#

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

 
 
 
 
Copy
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实例:redis

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

资料:https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/memory?view=aspnetcore-2.1#using-imemorycachejson

分布式缓存#

https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed?view=aspnetcore-2.1缓存

Session#

要添加对Session支持,不然会报错Session has not been configured for this
application or request。使用方法 http://www.cnblogs.com/sword-successful/p/6243841.htmlcookie

(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:
http://www.hossambarakat.net/2016/02/03/configuring-redis-as-asp-net-core-1-0-session-store/session

1.在MVC Controller里使用HttpContext.Sessionapp

 
 
 
 
Copy
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里,你能够注入IHttpContextAccessorasp.net

 
 
 
 
Copy
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 中的会话和应用状态
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/app-state?view=aspnetcore-2.1#session-state分布式

问题:#

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

解决方案:
注释掉下面这段:函数

 
 
 
 
Copy
public void ConfigureServices(IServiceCollection services) { // services.Configure<CookiePolicyOptions>(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(); }
相关文章
相关标签/搜索