记一次使用MemoryCache不能Get的问题
在.NET Core自带的Angular模板项目中,我想要做一个简单的登录认证。
所以想填写用户名密码,使用guid作为key,存储登录信息,每次页面刷新的时候check它。
思路觉得没有问题,但是一直失效,修改前代码:
public class AuthController : Controller
{
private readonly IMemoryCache _cache;
public AuthController(IMemoryCache cache)
{
_cache = cache;
}
[HttpPost]
public IActionResult Post([FromBody]LoginModel model)
{
if (model != null && model.UserName == "xxxxx" && model.Password == "yyyyyyy")
{
var token = Guid.NewGuid();
var cacheEntryOptions = new MemoryCacheEntryOptions()
.SetPriority(CacheItemPriority.NeverRemove)
.SetSlidingExpiration(TimeSpan.FromDays());
_cache.Set(token, model, cacheEntryOptions);
return Ok(new { success = true, token = token, model= _cache.Get<LoginModel>(token) });
}
return Ok(new { success = false, error = "UserName or Password error." });
}
[HttpGet("check/{token}")]
public IActionResult Check(string token)
{
var model = _cache.Get<LoginModel>(token);
if (model != null && model.UserName == "xxxxx" && model.Password == "yyyyyyy")
{
return Ok(new { success = true, model });
}
return Ok(new { success = false, model });
} public class LoginModel
{
public string UserName { get; set; }
public string Password { get; set; }
}
}
但是在调用check的api时,就是找不到。
后来发现在set的地方,guid没有ToString,所以导致两次使用过的key不一样。
修改后:
[Route("api/auth")]
public class AuthController : Controller
{
private readonly IMemoryCache _cache;
public AuthController(IMemoryCache cache)
{
_cache = cache;
}
[HttpPost]
public IActionResult Post([FromBody]LoginModel model)
{
if (!model.IsValidUserInfo())
return Ok(new { success = false, error = "UserName or Password error." });
var token = Guid.NewGuid().ToString();
var cacheEntryOptions = new MemoryCacheEntryOptions()
.SetPriority(CacheItemPriority.NeverRemove)
.SetSlidingExpiration(TimeSpan.FromDays());
_cache.Set(token, model, cacheEntryOptions);
return Ok(new { success = true, token = token });
}
[HttpGet("check/{token}")]
public IActionResult Check(string token)
{
var model = _cache.Get<LoginModel>(token);
return Ok(new { success = model.IsValidUserInfo() });
}
public class LoginModel
{
public string UserName { get; set; }
public string Password { get; set; }
}
}
public static class extController
{
public static bool IsValidUserInfo(this AuthController.LoginModel me)
=> me != null && me.UserName == "xxxx" && me.Password == "yyyy";
}
注:多加了一个扩展方法,验证登录信息。
记一次使用MemoryCache不能Get的问题的更多相关文章
- Netcore中简单使用MemoryCache
用到缓存架构,我们一般都会想到的Redis,因为它支持分布式,高可用,速率非常快.MemoryCache则相对较少提到,但是对于单体项目或者小型项目,memorycache还是是不错的选择.Memor ...
- 记一次 .NET 某电商交易平台Web站 CPU爆高分析
一:背景 1. 讲故事 已经连续写了几篇关于内存暴涨的真实案例,有点麻木了,这篇换个口味,分享一个 CPU爆高 的案例,前段时间有位朋友在 wx 上找到我,说他的一个老项目经常收到 CPU > ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- 这些年一直记不住的 Java I/O
参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以从这个总入口 Java SE 8 Documentati ...
- 千回百折:百度Java研发offer斩获记和经验分享
起因 面试过程 等待offer的过程中悟道 Java面试常考知识点个人总结 过程 百度——作为国内互联网的巨头之一,最近的一些风波对其褒贬不一,但是类似事件不是第一次发生,也绝对不是最后一次,对于真的 ...
- 记一次nginx部署yii2项目时502 bad gateway错误的排查
周六闲来无事,就试着安装和部署下yii2,安装过程没什么问题,但部署到nginx上时遇到了502 bad gatewary问题,折腾了半天才搞定.这个问题是我以前在部署yii2时没有遇到过的,因此记在 ...
- 【无私分享:ASP.NET CORE 项目实战(第十一章)】Asp.net Core 缓存 MemoryCache 和 Redis
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 经过 N 久反复的尝试,翻阅了网上无数的资料,GitHub上下载了十几个源码参考, Memory 和 Redis 终于写出一个 ...
- 原生JS实战:写了个一边玩游戏,一边记JS的API的游戏
本文是苏福的原创文章,转载请注明出处:苏福CNblog:http://www.cnblogs.com/susufufu/p/5878913.html 本程序[一边玩游戏,一边记JS的API]是本人的个 ...
随机推荐
- 小程序 - 分包加载上限8M(一)
使用分包 配置方法 假设支持分包的小程序目录结构如下 ├── app.js ├── app.json ├── app.wxss ├── packageA │ └── pages │ ├── c ...
- sizeof(数组名) 与 数组长度
int a[] = {1, 2, 3, 4}; cout << sizeof(a); //16 char b[] = "abc"; cout << size ...
- Unity QualitySettings.shadows 阴影
QualitySettings.shadows 阴影 public static ShadowQuality shadows; Description 描述: 要使用的实时阴影类型. 这就决定了应该使 ...
- Java基础29-子父类中的成员变量
/* 成员: 1.成员变量 2.函数 3.构造函数 变量: this 代表当前对象的引用 this.变量 首先在本类中找所需要的变量,如果没有找到再父类中找. super 用于访问当前对象的父类成员, ...
- How do I use screen on the Linux systems?
Scope The screen utility provides a way to run a command on a Linux system, detach from it, and then ...
- (转)最新版 nginx内置变量 大全
原文:http://www.cnphp.info/nginx-embedded-variables-lasted-version.html 在配置基于nginx服务器的网站时,必然会用到 nginx内 ...
- (转)tune2fs命令详解
tune2fs命令详解(原创) 原文:http://czmmiao.iteye.com/blog/1749232 tune2fs简介 tune2fs是调整和查看ext2/ext3文件系统的文件系统参数 ...
- Oracle 删除监听程服务
1.开始->运行->输入regidit ->->->->->红框内的右键删除 2.开始->运行->输入regidit ->->-> ...
- 我java学习时的模样(二)
去掉自己浮躁的心 工作了三年,见识过高山,也见过低估,高山同大神一起共事,低估是几家特别烂的外包公司,现在有了另一种心境.已经开始重视自己,去掉当初浮躁的心. 毕业的一两年内,是人成长特别快的时期,也 ...
- js confirm实现换行
js中confirm或者alert不识别标签,所以要换行的话可以采用下面方式 \u000d 或者 \r: <script> var res=confirm(\"这是测试工作: \ ...