asp.net core Session的测试使用心得
sp.net-core中Session是以中间件的形式注册使用的。不比asp.net中的使用,直接使用Session就行。
首先在.net-core框架中注入Session中间件,首先在ConfigureServices中注入Session服务。但是,我们还需要注册内存服务。将Session存储到内存中,代码如下:
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddDistributedMemoryCache(); services.AddSession(options => { options.IdleTimeout = TimeSpan.FromSeconds(1 * 60); }); }
接下来就是使用了。我们在表示HTTP管道的Configure中使用Session:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseSession(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseBrowserLink(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
我一开始并没有注意顺序,在这里的使用一定要注意顺序,如果顺序不当,会导致Session的使用出问题,但是并不会报错。
接下来就可以使用了。在Controller中:
public class HomeController : Controller { string ss = "dasdas"; public IActionResult Index() { if (HttpContext.Session.GetString(ss) == null) { HttpContext.Session.SetString(ss, "Added into Redis"); ViewData["ewq"] = "Empty"; } else { string s = HttpContext.Session.GetString(ss); ViewData["ewq"] = s; } return View(); } public IActionResult About() { ViewData["Message"] = "Your application description page."; string s = HttpContext.Session.GetString(ss); ViewData["das"] = s; return View(); } }
一般来讲,到这里就可以了。但是我遇到了问题,困扰了我一上午。
我一开始是按照网上的配置和官网的资料来做的。但是运行死活就是不出来结果,后来改了下Configure里的UseSession方法的顺序。还是不行,刷新了几下同时将Get和Set的操作写在同一个Action里面,然后就可以了。我开始怀疑是不是Session丢失了。因为将Session存储到内存里面还得使用中间件,我怀疑asp.net-core的这种以中间件方式丢失Session的概率比较大。后来又尝试了分开来,写在不同的action里面,结果却是可以啦。
还是有必要研究下asp.net-core引入内存存储的原理的。
那么如何将session存储到redis呢。对于redis在asp.net-core的使用,请看<<.net-core-Redis分布式缓存客户端实现逻辑分析及示例demo>>。我们将AddDistributedRedisCache替换成AddDistributedMemoryCache,就可以啦。
代码demo地址: 链接:https://pan.baidu.com/s/1IqYiinVLzoz7vEl5tsnNEA 密码:gxe4
下一篇: 中科院许鲁:云计算不应用永远不成熟
推荐阅读
-
创建基于ASP.NET core 3.1 的RazorPagesMovie项目(一)-创建和使用默认的模板
-
使用NuGet将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理
-
详解Asp.net Core 使用Redis存储Session
-
在 ASP.NET Core 项目中使用 npm 管理你的前端组件包
-
ASP.NET页面进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)第1/2页
-
微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。
-
或许是你应该了解的一些 ASP.NET Core Web API 使用小技巧
-
使用NLog给Asp.Net Core做请求监控的方法
-
asp.net core 使用 TestServer 来做集成测试的方法
-
ASP.NET Core 2.1 使用Docker运行的方法步骤