在.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的问题的更多相关文章

  1. Netcore中简单使用MemoryCache

    用到缓存架构,我们一般都会想到的Redis,因为它支持分布式,高可用,速率非常快.MemoryCache则相对较少提到,但是对于单体项目或者小型项目,memorycache还是是不错的选择.Memor ...

  2. 记一次 .NET 某电商交易平台Web站 CPU爆高分析

    一:背景 1. 讲故事 已经连续写了几篇关于内存暴涨的真实案例,有点麻木了,这篇换个口味,分享一个 CPU爆高 的案例,前段时间有位朋友在 wx 上找到我,说他的一个老项目经常收到 CPU > ...

  3. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  4. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  5. 这些年一直记不住的 Java I/O

    参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以从这个总入口 Java SE 8 Documentati ...

  6. 千回百折:百度Java研发offer斩获记和经验分享

    起因 面试过程 等待offer的过程中悟道 Java面试常考知识点个人总结 过程 百度——作为国内互联网的巨头之一,最近的一些风波对其褒贬不一,但是类似事件不是第一次发生,也绝对不是最后一次,对于真的 ...

  7. 记一次nginx部署yii2项目时502 bad gateway错误的排查

    周六闲来无事,就试着安装和部署下yii2,安装过程没什么问题,但部署到nginx上时遇到了502 bad gatewary问题,折腾了半天才搞定.这个问题是我以前在部署yii2时没有遇到过的,因此记在 ...

  8. 【无私分享:ASP.NET CORE 项目实战(第十一章)】Asp.net Core 缓存 MemoryCache 和 Redis

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 经过 N 久反复的尝试,翻阅了网上无数的资料,GitHub上下载了十几个源码参考, Memory 和 Redis 终于写出一个 ...

  9. 原生JS实战:写了个一边玩游戏,一边记JS的API的游戏

    本文是苏福的原创文章,转载请注明出处:苏福CNblog:http://www.cnblogs.com/susufufu/p/5878913.html 本程序[一边玩游戏,一边记JS的API]是本人的个 ...

随机推荐

  1. 面经问题总结——django相关

    1.让你从头设计一个web框架,第一步你会做什么? 2.django的orm是怎么实现的? 3.django的URL路径映射是怎么实现的? 4.平常你怎么运用django提供的钩子函数? 5.三级分销 ...

  2. (转)Cobbler自动化部署最佳实践

    原文:http://www.xuliangwei.com/xubusi/446.html 运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统, ...

  3. (转)CentOS7 搭建LVS+keepalived负载均衡(一)

    原文:http://blog.csdn.net/u012852986/article/details/52386306 CentOS7 搭建LVS+keepalived负载均衡(一) CentOS7 ...

  4. AngularJs学习笔记--Injecting Services Into Controllers

    原版地址:http://docs.angularjs.org/guide/dev_guide.services.injecting_controllers 把service当作被依赖的资源加载到con ...

  5. 005-C3P0连接池配置文件模板

    文件名必须为:c3p0-config.xml 一般放在src目录下面 <?xml version="1.0" encoding="UTF-8"?> ...

  6. StringUtils 中 isEmpty 和 isBlank 的区别

    在项目的工作学习中经常用到了 apache  commons 中的 StringUtils 的 isBlank 和 isEmpty 来判断字符串是否为空,这个方法都是判断字符串是否为空做判断的,以至于 ...

  7. orcale 之 SQL 数据查询

    从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列.虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下: SELECT select_list [ INTO new_tab ...

  8. 大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作

    第十九章 Scala语言的数据结构和算法19.1 数据结构(算法)的介绍19.2 看几个实际编程中遇到的问题19.2.1 一个五子棋程序19.2.2 约瑟夫问题(丢手帕问题)19.2.3 其它常见算法 ...

  9. java POST 传值 加签 验证

    话不多说,代码如下 package com.syl.test_key; import lombok.extern.slf4j.Slf4j; import org.apache.commons.code ...

  10. [转]让ASP.NET Web API支持$format参数的方法

    本文转自:http://www.cnblogs.com/liuzhendong/p/4228592.html 在不使用OData的情况下,也可以让ASP.NET Web API支持$format参数, ...