• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >微信公众号 > asp.net开发微信公众平台(2)多层架构框架搭建和入口实现

asp.net开发微信公众平台(2)多层架构框架搭建和入口实现

作者:匿名 字体:[增加 减小] 来源:互联网

匿名通过本文主要向大家介绍了微信公众平台, .NET等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
上篇已经设计出比较完善的数据库了,这篇开始进入代码。 首先把上篇设计的数据库脚本在数据库中执行下,生成数据库,然后在VS中建立项目,为了方便理解和查看,我设计的都是很直白的类名和文件名,没有命名空间前缀。

采用接口方式,共8个项目:7个类库和一个MVC项目, 分别为:

显示层——MVC项目

业务逻辑层——访问接口IBLL、具体实现BLL

数据访问层——访问接口IDAL、具体实现DAL

数据(模型)——DataModel

通用方法——Common

仓储——Factory

这里的仓储并不为了生产业务逻辑层和数据访问层的接口,而是为了存放EntityFramework上下文对象和一些缓存管理,业务逻辑层和数据访问层的接口生产(实现)工作我会交给Spring.NET注入实现。 框架搭建好之后如下:

asp.net开发微信公众平台(2)多层架构框架搭建和入口实现

框架搭建好了,接下去把数据库添加进来,在DAL中(注意是DAL不是datamodel)添加新项,选择数据--ADO.NET实体数据模型:

asp.net开发微信公众平台(2)多层架构框架搭建和入口实现

取个名字,就叫WeixinModel吧, 选择从数据库生成,配置一下数据库连接到之前生成的数据库,一路下一步,最后加载到edmx, 在edmx上右键--添加代码生成项,选择代码:asp.net开发微信公众平台(2)多层架构框架搭建和入口实现asp.net开发微信公众平台(2)多层架构框架搭建和入口实现

选DbContext Generator, 然后保存一下edmx, 之后把edmx和weixinmodel.tt复制到DataModel,删除DAL中的edmx和weixinmodel.tt, 在datamodel中打开weixinmodel.tt保存一下即可, 另外需要在DAL中保留的WeiXinModel.Context.cs中声明datamodel命名空间。

框架和数据模型都有了,接下去在DAL、IDAL、BLL、IBLL中按照正确的引用层次添加引用,并写几个常用方法,就可以开始在显示层中使用了,

这里举例在DAL中写添删改查方法:

//添加
        public T AddEntity<T>(DbContext db,T entity) where T : class
        {
            db.Entry<T>(entity).State = EntityState.Added;
            db.SaveChanges();
            return entity;
        }

        //修改
        public bool UpdateEntity<T>(DbContext db,T entity) where T : class
        {
            db.Set<T>().Attach(entity);
            db.Entry<T>(entity).State = EntityState.Modified;
            db.SaveChanges();
            return true;
        }
        //删除
        public bool DeleteEntity<T>(DbContext db,T entity) where T : class
        {
            db.Set<T>().Attach(entity);
            db.Entry<T>(entity).State = EntityState.Deleted;
            db.SaveChanges();
            return true;

        }




        // 返回一个对象
        public T InfoEntities<T>(DbContext db, Expression<Func<T, bool>> whereLambda) where T : class
        {

            return db.Set<T>().Where<T>(whereLambda).FirstOrDefault();

        }

对应的把接口、业务逻辑层都写上。

现在来到显示层,默认的MVC项目是返回VIEW, 这里我们不需要返回页面, 把home中的index改成Void返回类型, 接下去就是接收微信发来的请求进行判断了,验证请求----接收POST数据---分析XML----解析成自己想要的数据

  入口:首先验证消息来源是微信服务器,然后解析收到的xml,解析成功有数据则执行LookMsgType方法来进行处理

private IBLL.IDoWei BLLWei { set; get; }
        public DbContext dbHome { get; set; }
        private string token { get; set; }
        Dictionary<string, string> xmlModel = new Dictionary<string, string>();         
        public void Index()
        {
            dbHome=FContext.WeiXinDbContext(); 
            //xml字符串
            string xmlData = string.Empty;
            //请求类型
            string method=Request.HttpMethod.ToLower();
            string signature = Request.QueryString["signature"];
            string timestamp = Request.QueryString["timestamp"];
            string nonce = Request.QueryString["nonce"];
            //验证接入和每次请求验证真实性
            if (method == "get")
            {
                if (CheckSign(signature,timestamp,nonce))
                {
                    Often.ResponseToEnd(Request.QueryString["echostr"]);
                }
                else
                {
                    Response.Status = "403";
                    Often.ResponseToEnd("");
                }
            }
            //处理接收到的POST消息
            else if (method == "post")
            {
                using (Stream stream = Request.InputStream)
                {
                    Byte[] byteData = new Byte[stream.Length];
                    stream.Read(byteData, 0, (Int32)stream.Length);
                    xmlData = Encoding.UTF8.GetString(byteData);
                }
                if (!string.IsNullOrEmpty(xmlData))
                {
                    try
                    {
                        xmlModel = ReadXml.GetXmlModel(xmlData);
                    }
                    catch
                    {
                        //未能正确处理 给微信服务器回复默认值
                        Often.ResponseToEnd("");
                    }
                }
                if (xmlModel.Count > 0)
                {
                    string msgType = ReadXml.ReadModel("MsgType", xmlModel);
                    LookMsgType(msgType);
                }
            }
            else//除了post和get外 如head皆视为非法请求
            {
                Response.Status = "403";
                Often.ResponseToEnd("");  
            }
            dbHome.Dispose();
        }

这里用到的验证方法:

/// <summary>
        /// 验证签名
        /// </summary>
        /// <param name="signature"></param>
        /// <param name="timestamp"></param>
        /// <param name="nonce"></param>
        /// <returns></returns>
        public bool CheckSign(string signature, string timestamp, string nonce)
        {
            List<string> list = new List<string>();
            list.Add(token);
            list.Add(timestamp);
            list.Add(nonce);
            //默认排序
            list.Sort();
            string tmpStr = string.Empty;
            list.All(l => { tmpStr += l; return true; });
            tmpStr = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
            //验证
            if (tmpStr == signature)
            {
                return true;
            }
            return false;
        }

仓储中的EF上下文:

public static DbContext WeiXinDbContext()
        {
            DbContext dbcontext =new 



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 来看看你的颜值多高吧!基于Python开发的公众号
  • 三步教你接入微信公众平台开发
  • 微信开发之数据库操作
  • 详解mp、open、pay三大平台直接的关联
  • iOS版微信公众平台赞赏功能关闭后你必须要知道的四点
  • 解析微信公众平台开发之验证步骤实例(PHP版)
  • 用JAVA开发微信公众平台(一)-环境搭建与开发接入
  • .net开发微信公众平台的方法
  • .NET微信公众号获取OpenID和用户信息实例解析
  • 微信公众平台消息接口开发地理位置查询附近商家实例

相关文章

  • C#开发微信门户及应用-微信门户菜单管理及提交到微信服务器
  • 微信开发之模板消息回复
  • 开发微信支付基础知识总结
  • 微信开发之如何调用全局JS?
  • 微信开发之接收文本消息
  • 关于跑步的详细介绍
  • weiphp微信开发教程留言板插件开发详解
  • 微信网页开发之创建Controller
  • 微信接口开发的详细介绍
  • C#微信公众平台开发之高级群发接口

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 微信开发之input控件的实例详解
    • 使用java实现微信公众平台自定义菜单的创建示例代码
    • C#微信公众平台开发—高级群发接口
    • 微信公众号开发:通过accesstoken将长连接转换为短链接
    • asp.net开发微信公众平台(8)微信9大高级接口,自定义菜单
    • 分享一篇基于.NET的微信SDK
    • .Net开发微信公众平台之自定义菜单代码详解
    • 微信公众平台开发-ACCESS TOKEN
    • asp.net开发微信公众平台(4)关注事件、用户记录、回复文本消息
    • 详细讲解微信指数与百度指数到底有什么区别

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有