MVC4+WebApi+Redis Session共享练习(上)
这几天生病了,也没有心情写博客,北京医院真心伤不起呀,钱不少花,病没治好,还增加了新病,哎不说了,周末还得去大医院检查一下,趁女盆友还没有回来,把前几天写的东西总结一下。本文也会接触一点webApi的东东,自己最近也一直在看,算是入门了吧。本文用到的知识点有MVC4、knockout.js、EntityFramework、WebApi、Redis缓存及基于Redis缓存的Session共享,都是很基础的操作,MVC我会介绍过滤器及错误捕捉,EntityFramework增删改数据,WebApi做为数据通信以及Redis的基本缓存操作等。
如果你对这些知识还不太熟悉,请打开连接阅读前几篇文章。http://www.cnblogs.com/lc-chenlong/
本文参考:
http://www.cnblogs.com/artech/archive/2012/05/14/web-api-demo.html(蒋金楠)
http://www.cnblogs.com/rohelm/p/3195750.html(webAPI入门讲解)
本文主要实现以下功能:
- MVCweb程序与WebApi实现数据通信及Session共享(两个分部署)
- MVC过滤器及错误捕捉
- Redis缓存操作
通过一个学生信息的管理来实现该项目。本人对webApi也是入门级别,如果过得不对的欢迎指正,也欢迎分享学习资料。
1、我们先介绍一下WebApi项目,项目结构如下图
- 其中Common项目为自定义的Session,详细请参见http://www.cnblogs.com/lc-chenlong/p/3221003.html
- MvcWebApi要引用Common项目
- MvcWebApi项目 ValuesController.cs为数据的增删改查及Redis缓存操作
- DbHelper.cs为我们的数据库上下文
- Students.cs为学生实体类。
1.1、Students.cs实体类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations; namespace MvcWebApi.Models
{
[Table("tb_Students", Schema = "dbo")]//关联数据表 dbo.tb_Students
public class Students
{
[Key]
public string Num { get; set; }
[MaxLength(),Required(ErrorMessage="姓名不能为空")]
[Column(TypeName = "nvarchar")]
public string Name { get; set; }
public int Age { get; set; }
[MaxLength()]
[Column(TypeName = "varchar")]
public string Sex { get; set; }
[MaxLength()]
public string Class { get; set; }
}
}
1.2、DbHelper.cs数据库上下文
该文件主要定义数据库的上下文,我对EF用的海曙不够熟练,最近也一直在看,推荐一个人的博客,是一个EF学习的系列,讲的还不错。http://www.cnblogs.com/wlflovenet/archive/2011/12/30/EF11.html
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.Migrations; namespace MvcWebApi.Models
{
public class DbHelper : DbContext
{
public DbHelper()
: base("strConn")
{
//自动创建表,如果Entity有改到就更新到表结构
Database.SetInitializer<DbHelper>(new MigrateDatabaseToLatestVersion<DbHelper, ReportingDbMigrationsConfiguration>());
}
public DbSet<Students> Students { get; set; }
}
internal sealed class ReportingDbMigrationsConfiguration : DbMigrationsConfiguration<DbHelper>
{
public ReportingDbMigrationsConfiguration()
{
AutomaticMigrationsEnabled = true;//任何Model Class的修改將會直接更新DB
AutomaticMigrationDataLossAllowed = true;
}
}
}
1.3、ValuesController.cs数据操作控制器
在控制器中我们定义了增删改查的基本方法,及Redis的操作,该控制器中只有Get()方法判断了session是否为空,这里只是为了验证一下session的值是否传递过来了。本知识点参照文章:http://www.cnblogs.com/newton/p/3238082.html
看代码之前下介绍一下Redis的一个操作。1、Redise.AddEntityToList<Students>("stuList", stu);我们定义了一个缓存键位stuList的缓存列表,该缓存列表存储的是Students实体,而不是把List<Students> stu存进去。2、Redise.AddEntityToList<Students>("stuList", stu);将单个stu对象存进缓存链表中。3、Redise.GetList<Students>("stuList")从缓存中获取列表。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using MvcWebApi.Models;
using Common;
using System.Data; namespace MvcWebApi.Controllers
{
public class ValuesController : ApiController
{
SessionHelper session = new SessionHelper();
RedisHelper Redise = new RedisHelper();
// GET api/values public HttpResponseMessage Get()
{
//判断session的值是否传递过来
if (session["user"] == null)
{
return Request.CreateResponse(HttpStatusCode.OK, new { type="error",data="session为空,清先登陆"});
}
//从stuList缓存链表获取数据
var stuList = Redise.GetList<Students>("stuList");
if (stuList == null || stuList.Count()==)
{
using (DbHelper db = new DbHelper())
{
stuList = db.Students.ToList();
//创建stuList缓存链表
Redise.AddList<Students>("stuList", stuList);
}
}
var data = new { type = "success", data = stuList };
return Request.CreateResponse(HttpStatusCode.OK, data); //db.Students.ToList(); } // GET api/values/5
public Students Get(string id)
{
Students stu = Redise.GetList<Students>("stuList").Where(it => it.Num == id).FirstOrDefault();
if (stu == null)
{
using (DbHelper db = new DbHelper())
{
stu=db.Students.Where(it => it.Num == id).FirstOrDefault();
if (stu != null)
{
//向stuList缓存链表中添加实体
Redise.AddEntityToList<Students>("stuList", stu);
}
}
}
return stu;
} // POST api/values
public void Post([FromBody] Students stu)
{ } // PUT api/values/5
public HttpResponseMessage Put([FromBody] Students stu)
{
Students RedStu = Redise.GetList<Students>("stuList").Where(it => it.Num == stu.Num).FirstOrDefault(); Redise.RemoveEntityFromList<Students>("stuList", RedStu);
Redise.AddEntityToList("stuList", stu);
using (DbHelper db = new DbHelper())
{
db.Entry(stu).State = EntityState.Modified;
db.SaveChanges();
} return Request.CreateResponse(HttpStatusCode.OK, new { type = "success" });
} // DELETE api/values/5
public void Delete(int id)
{
}
} }
介绍一下下面代码返回的json数据格式
var data = new { type = "success", data = stuList };
return Request.CreateResponse(HttpStatusCode.OK, data);
数据格式为:
{"type":"success",data:[{},{},{}]}
今天就写到这里吧。明天继续写MVC调用WebAPi。源代码下一篇写完奉上。
每天学习一点点,每天进步一点点
MVC4+WebApi+Redis Session共享练习(上)的更多相关文章
- MVC4+WebApi+Redis Session共享练习(下)
上一篇文章我们主要讲解了一些webApi和redis缓存操作,这篇文章我们主要说一些MVC相关的知识(过滤器和错误处理),及采用ajax调用webApi服务. 本篇例子采用的开发环境为:VS2010( ...
- nginx tomcat负载均衡 使用redis session共享
环境准备 1.准备一台nginx服务器 ip192.168.1.133 端口81 安装过程: #首先安装依赖: yum -y install gcc-c++ yum -y install pcre p ...
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...
- redis session 共享 测试案列
下载 spring redis session demo 2.分别在不同的服务器上启动 3.nginx 安装 测试
- Tomcat 集群 + Redis Session 共享出现 Session 瞬间失效问题
写在前面的话 写这篇博客出于公司最近要迁移到新的云上面且对之前的资源,架构做一个升级. 本来是一个不大的项目,旧环境旧一个 TOMCAT 跑起来,不过出于高可用考虑,新环境决定使用 TOMCAT 集群 ...
- tomcat redis session共享
编译redis所需要的序列化包 安装 gradle Linux & MacOS users Configure your PATH environment variable to includ ...
- redis session共享中的序列化问题
今天在做session对象存入redis(set方法)时,碰到一个空指针异常,代码如下: public class CheckAccount extends HttpServlet { public ...
- springboot-不同名称项目的 redis session共享
引入JAR <dependency> <groupId>org.springframework.session</groupId> <artifactId&g ...
- Tomcat7 Redis Session共享
1.环境 服务器 centos7 tomcat 7 redis nginx 2.配置tomcat配置文件context.xml <Valve className="com.orange ...
随机推荐
- JS 驗證英文字母
//英文简介栏位焦点离开事件 function checkSummaryEN(SummaryEN) { var val = $(SummaryEN).val(); v ...
- mongodb下载、安装、配置服务启动、及可视化工具下载、使用
MongoDB: 1.下载地址:http://www.mongodb.org/downloads(32位还是64位自行选择).我下载的是:mongodb-win32-x86_64-3.2.4-sign ...
- input输入子系统
一.什么是input输入子系统? 1.Linux系统支持的输入设备繁多,例如键盘.鼠标.触摸屏.手柄或者是一些输入设备像体感输入等等,Linux系统是如何管理如此之多的不同类型.不同原理.不同的输入信 ...
- IE内嵌google chrome frame解决浏览器兼容问题
IE内嵌google chrome frame解决浏览器兼容问题 http://www.cnblogs.com/xwdreamer/archive/2013/12/17/3477776.html 参 ...
- linux 下如何安装Telnet ?
1 如何查看我的linux下是否安装了这个服务?2 没有安装的情况下,如何安装?3 client端 需要安装什么吗? 查看:rpm -qa | grep telnet安装:yum install -y ...
- 前端开发必备! 20 个强大的 Sublime Text 插件
http://www.oschina.net/translate/20-powerful-sublimetext-plugins http://www.w3cplus.com/tools/emmet- ...
- MSVC 报错 unable to use inline in declaration get error C2054
晚上用cmake生成了一份lua-cjson的工程文件,msvc6的 编译时报错 后来再stackoverflow找到答案:unable to use inline in declaration ge ...
- 初入Cocos2d-x 2.2
下载2.2,用迅雷离线下载很快搞定. 解压后,打开cocos2d-win32.vc2012.sln,编译,超慢,20分钟才完事. 然后想创建一个新项目,需要用到python,用python3.3运行脚 ...
- 移动端调试工具推荐 小苹果和debugap
小苹果的安装很简单,这是官网,一看就会,完全小白教程. http://www.xbole.com/ debugap的也很简单,这里简单附图介绍一下 ps 官网: http://www.debuggap ...
- [转]Caffe 深度学习框架上手教程
Caffe 深度学习框架上手教程 机器学习Caffe caffe 原文地址:http://suanfazu.com/t/caffe/281 blink 15年1月 6 Caffe448是一个清 ...