这几天生病了,也没有心情写博客,北京医院真心伤不起呀,钱不少花,病没治好,还增加了新病,哎不说了,周末还得去大医院检查一下,趁女盆友还没有回来,把前几天写的东西总结一下。本文也会接触一点webApi的东东,自己最近也一直在看,算是入门了吧。本文用到的知识点有MVC4、knockout.jsEntityFramework、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入门讲解)

本文主要实现以下功能:

  1. MVCweb程序与WebApi实现数据通信及Session共享(两个分部署)
  2. MVC过滤器及错误捕捉
  3. Redis缓存操作

通过一个学生信息的管理来实现该项目。本人对webApi也是入门级别,如果过得不对的欢迎指正,也欢迎分享学习资料。

1、我们先介绍一下WebApi项目,项目结构如下图

  1. 其中Common项目为自定义的Session,详细请参见http://www.cnblogs.com/lc-chenlong/p/3221003.html
  2. MvcWebApi要引用Common项目
  3. MvcWebApi项目 ValuesController.cs为数据的增删改查及Redis缓存操作
  4. DbHelper.cs为我们的数据库上下文
  5. 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共享练习(上)的更多相关文章

  1. MVC4+WebApi+Redis Session共享练习(下)

    上一篇文章我们主要讲解了一些webApi和redis缓存操作,这篇文章我们主要说一些MVC相关的知识(过滤器和错误处理),及采用ajax调用webApi服务. 本篇例子采用的开发环境为:VS2010( ...

  2. nginx tomcat负载均衡 使用redis session共享

    环境准备 1.准备一台nginx服务器 ip192.168.1.133 端口81 安装过程: #首先安装依赖: yum -y install gcc-c++ yum -y install pcre p ...

  3. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  4. redis session 共享 测试案列

    下载 spring redis session demo 2.分别在不同的服务器上启动 3.nginx 安装 测试

  5. Tomcat 集群 + Redis Session 共享出现 Session 瞬间失效问题

    写在前面的话 写这篇博客出于公司最近要迁移到新的云上面且对之前的资源,架构做一个升级. 本来是一个不大的项目,旧环境旧一个 TOMCAT 跑起来,不过出于高可用考虑,新环境决定使用 TOMCAT 集群 ...

  6. tomcat redis session共享

    编译redis所需要的序列化包 安装 gradle Linux & MacOS users Configure your PATH environment variable to includ ...

  7. redis session共享中的序列化问题

    今天在做session对象存入redis(set方法)时,碰到一个空指针异常,代码如下: public class CheckAccount extends HttpServlet { public ...

  8. springboot-不同名称项目的 redis session共享

    引入JAR <dependency> <groupId>org.springframework.session</groupId> <artifactId&g ...

  9. Tomcat7 Redis Session共享

    1.环境 服务器 centos7 tomcat 7 redis nginx 2.配置tomcat配置文件context.xml <Valve className="com.orange ...

随机推荐

  1. Mybatis保存数据时事务问题

    今天不小心在sqlplus中用for update ,然后事务没提交,结果在项目中一直保存不进去数据,找了很久发现是sqlplus中的事务没提交,哎,这种问题真得避免啊,一定要细心啊!

  2. “数学口袋精灵”第二个Sprint计划(第十天)总结

    第二阶段Sprint完成情况: 目标:完成一个小游戏 情况:ui基本完成. 代码基本也完成了,部分未完善. 音乐方面有点小bug,正在完善. 具体运行结果(截图): 首页: 游戏界面(可以计算多个运算 ...

  3. {POJ}{动态规划}{题目列表}

    动态规划与贪心相关: {HDU}{4739}{Zhuge Liang's Mines}{压缩DP} 题意:给定20个点坐标,求最多有多少个不相交(点也不相交)的正方形 思路:背包问题,求出所有的正方形 ...

  4. 特征工程 dataframe格式

    import os import copy import codecs import operator import re from math import log from pyspark.sql ...

  5. 详解Oracle DELETE和TRUNCATE 的区别(摘)

    语法delete from aa truncate table aa 区别 1.delete from后面可以写条件,truncate不可以. 2.delete from记录是一条条删的,所删除的每行 ...

  6. 关于Oracle的性能调整(一)

    Oracle Tuning的一些总结 关于Oracle的性能调整,一般包括两个方面,一是指Oracle数据库本身的调整,比如SGA.PGA的优化设置,二是连接Oracle的应用程序以及SQL语句的优化 ...

  7. $使用dom4j可解析 返回&#x等字样的 html转义字符

    如果以GET或POST请求某个系统返回,带有 $#x 那很有可能是axis服务器返回的. <?xml version="1.0" encoding="UTF-8&q ...

  8. WordPress主机

  9. hdu 1757 A Simple Math Problem (乘法矩阵)

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  10. Asp.net web api部署在某些服务器上老是404

    asp.net web api部署在Windows服务器上后,按照WebAPI定义的路由访问,老是出现404,但定义一个静态文件从站点访问,却又OK. 这时,便可以确定是WebAPI路由出了问题,经调 ...