WebEnh

.net7 mvc jquery bootstrap json 学习中 第一次学PHP,正在研究中。自学进行时... ... 我的博客 https://enhweb.github.io/ 不错的皮肤:darkgreentrip,iMetro_HD
随笔 - 1079, 文章 - 1, 评论 - 75, 阅读 - 174万
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

asp.net core 缓存和Session

Posted on   WebEnh  阅读(597)  评论(0编辑  收藏  举报

目录(?)[+]

 

缓存

缓存在内存中 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);
        }

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

分布式缓存

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.html

(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/

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

问题:

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

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

        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();
        }
 
分类: ASP.NET Core
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2018-08-30 【SignalR学习系列】2. 第一个SignalR程序
2018-08-30 【SignalR学习系列】1. SignalR理论介绍
2018-08-30 【SignalR学习系列】3. SignalR实时高刷新率程序
2018-08-30 【SignalR学习系列】4. SignalR广播程序
2018-08-30 【SignalR学习系列】5. SignalR WPF程序
2018-08-30 【SignalR学习系列】8. SignalR Hubs Api 详解(.Net C# 客户端)
2018-08-30 【SignalR学习系列】7. SignalR Hubs Api 详解(JavaScript 客户端)
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

了解更多