设为首页 收藏本站
查看: 1081|回复: 0

[经验分享] MVC4+WebApi+Redis Session共享练习(上)

[复制链接]

尚未签到

发表于 2015-7-19 12:44:57 | 显示全部楼层 |阅读模式
  这几天生病了,也没有心情写博客,北京医院真心伤不起呀,钱不少花,病没治好,还增加了新病,哎不说了,周末还得去大医院检查一下,趁女盆友还没有回来,把前几天写的东西总结一下。本文也会接触一点webApi的东东,自己最近也一直在看,算是入门了吧。本文用到的知识点有MVC4、knockout.js、EntityFramework、WebApi、Redis缓存及基于Redis缓存的Session共享,都是很基础的操作,MVC我会介绍过滤器及错误捕捉,EntityFramework增删改数据,WebApi做为数据通信以及Redis的基本缓存操作等。
  如果你对这些知识还不太熟悉,请打开连接阅读前几篇文章。http://www.iyunv.com/lc-chenlong/
  本文参考:
  http://www.iyunv.com/artech/archive/2012/05/14/web-api-demo.html(蒋金楠)
  http://www.iyunv.com/rohelm/p/3195750.html(webAPI入门讲解)
  本文主要实现以下功能:


  • MVCweb程序与WebApi实现数据通信及Session共享(两个分部署)
  • MVC过滤器及错误捕捉
  • Redis缓存操作
  通过一个学生信息的管理来实现该项目。本人对webApi也是入门级别,如果过得不对的欢迎指正,也欢迎分享学习资料。
  1、我们先介绍一下WebApi项目,项目结构如下图
DSC0000.gif


  • 其中Common项目为自定义的Session,详细请参见http://www.iyunv.com/lc-chenlong/p/3221003.html
  • MvcWebApi要引用Common项目
  • MvcWebApi项目 ValuesController.cs为数据的增删改查及Redis缓存操作
  • DbHelper.cs为我们的数据库上下文
  • Students.cs为学生实体类。
  1.1、Students.cs实体类


DSC0001.gif


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(10),Required(ErrorMessage="姓名不能为空")]
[Column(TypeName = "nvarchar")]
public string Name { get; set; }
public int Age { get; set; }
[MaxLength(10)]
[Column(TypeName = "varchar")]
public string Sex { get; set; }
[MaxLength(50)]
public string Class { get; set; }
}
}
View Code   1.2、DbHelper.cs数据库上下文
  该文件主要定义数据库的上下文,我对EF用的海曙不够熟练,最近也一直在看,推荐一个人的博客,是一个EF学习的系列,讲的还不错。http://www.iyunv.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(new MigrateDatabaseToLatestVersion());
}
public DbSet Students { get; set; }
}
internal sealed class ReportingDbMigrationsConfiguration : DbMigrationsConfiguration
{
public ReportingDbMigrationsConfiguration()
{
AutomaticMigrationsEnabled = true;//任何Model Class的修改將會直接更新DB
AutomaticMigrationDataLossAllowed = true;
}
}
}
View Code   
  1.3、ValuesController.cs数据操作控制器
  在控制器中我们定义了增删改查的基本方法,及Redis的操作,该控制器中只有Get()方法判断了session是否为空,这里只是为了验证一下session的值是否传递过来了。本知识点参照文章:http://www.iyunv.com/newton/p/3238082.html
  看代码之前下介绍一下Redis的一个操作。1、Redise.AddEntityToList("stuList", stu);我们定义了一个缓存键位stuList的缓存列表,该缓存列表存储的是Students实体,而不是把List stu存进去。2、Redise.AddEntityToList("stuList", stu);将单个stu对象存进缓存链表中。3、Redise.GetList("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("stuList");
if (stuList == null || stuList.Count()==0)
{
using (DbHelper db = new DbHelper())
{
stuList = db.Students.ToList();
//创建stuList缓存链表
Redise.AddList("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("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("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("stuList").Where(it => it.Num == stu.Num).FirstOrDefault();
Redise.RemoveEntityFromList("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。源代码下一篇写完奉上。
  每天学习一点点,每天进步一点点
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-88279-1-1.html 上篇帖子: session放入缓存(redis)、DB 下篇帖子: 基于Redis缓存的Session共享(附源码)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表