热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux下_Linux下的.NETMVCCMS(源码)

本文由编程笔记#小编为大家整理,主要介绍了Linux下的.NETMVCCMS(源码)相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了Linux下的.NET MVC CMS(源码)相关的知识,希望对你有一定的参考价值。





来源:叶鹏




cnblogs.com/jqbird/p/8098334.html



CMS程序架构


本程序是主要是用于企业网站开发的,也可以做博客程序,程序是从之前上一篇的.NET博客程序改进过来的,主要技术由WebForm转成.NET MVC了,由于是很早之前的项目,12年还是MVC3版本,当然还是跑在Linux下的。


技术栈




  • .NET  framework 4.0



  • Sqlite 数据库



  • Mono Linux 运行环境以及mono下的Sqlite库



  • Razor 模板引擎



  • Dapper 轻量级ORM框架



  • VS2017 社区版本



这次的开发工具比较新了吧,上次用vs2010发的,跨度比较大,这个项目之前也是在10下开发出来的,虽然用2017,其实没什么影响的。


razor引擎比nvelocity的易用性高很多,而且跟后端集合的比较好。


而且这次的项目完全使用dapper orm,整个数据库访问层操作看起来也清爽很多了。


代码结构




左侧主要分为三个文件夹,Jqpress.web是存放web路由入口、模板皮肤、静态文件,上传文件夹,后台管理程序通过Areas域管理来实现的,整个项目结构还是比较清晰的。


路由设计


Linux下的.NET MVC CMS(源码)


路由入口为HomeController这个文件,包括首页、产品列表,文章列表,文章内容等待,都是通过这个Controller来路由的,虽然功能比较多,但是代码量不到300行,业务逻辑处理基本都在service层。


如下为一个列表界面的Action逻辑才20几行




public ActionResult Category(string pagename) 


{


    var model = new PostListModel();


    CategoryInfo cate = _categoryService.GetCategory(pagename);


    model.Category = cate;


    if (cate != null)


    {


        int categoryId = cate.CategoryId;


        model.MetaKeywords = cate.CateName;


        model.MetaDescription = cate.Description;


        ViewBag.Title = cate.CateName;


        model.Url = ConfigHelper.SiteUrl + "category/" + Jqpress.Framework.Utils.StringHelper.SqlEncode(pagename) + "/page/{0}";




        const int pageSize = 10;


        int count = 0;


        int pageIndex = PressRequest.GetInt("page", 1);


        int cateid = PressRequest.GetQueryInt("cateid", -1);


        int tagid = PressRequest.GetQueryInt("tagid", -1);


        if (cateid > 0)


            pageIndex = pageIndex + 1;


        var cateids =categoryId+","+ _categoryService.GetCategoryList().FindAll(c => c.ParentId == categoryId).Aggregate(string.Empty, (current, t) => current + (t.CategoryId + ",")).TrimEnd(',');


        var postlist = _postService.GetPostPageList(pageSize, pageIndex, out count, cateids.TrimEnd(','), tagid, -1, -1, -1, -1, -1,-1, "", "", "");


        model.PageList.LoadPagedList(postlist);


        model.PostList = (List)postlist;


    }


    model.IsDefault = 0;


    return View(model.Category.ViewName,model);


}



模板引擎设计


Linux下的.NET MVC CMS(源码)


Linux下的.NET MVC CMS(源码)


模板引擎采用razor,不同的cms风格模板以文件夹的形式存放在Themes文件夹下,通过后端设置可以随意切换模板(此功能还在完善当中)。


数据存储设计


Linux下的.NET MVC CMS(源码)


作为轻量级的cms,当然不会用mysql或者sqlserver,依然坚定的使用sqlite,以上是通过dapper进行数据库操作,虽然没有微软增加的orm强大,但是可读性和操控性都是非常好的。


Linux下的.NET MVC CMS(源码)


因为要支持linux,所以sqlite的操作类需要using Mono.Data.Sqlite;

,当然可以在windows下切换过来,上面我写的切换方式太粗暴了,学过设计模式的同学应该分分钟能够重构出来,切换windows和linux简直不要太方便。


数据库结构


Linux下的.NET MVC CMS(源码)




  • jq_category 分类及标签表



  • jq_comments 评论表



  • jq_links 友链及导航设置



  • jq_posts 文章表



  • jq_sites 站点访问统计数字及文章、分类、数量统计表



  • jq_users 账户表



数据库结构跟之前的 博客程序没差别,只是部分表结构字段有所差别


运行


VS2017调试模式预览


CMS首页


Linux下的.NET MVC CMS(源码)


后台登录,默认用户名admin,密码123456


Linux下的.NET MVC CMS(源码)


后台首页


Linux下的.NET MVC CMS(源码)


文章列表


Linux下的.NET MVC CMS(源码)


文章编辑


Linux下的.NET MVC CMS(源码)


Linux下的部署方式


mono


Linux下的.NET MVC CMS(源码)


上图为我服务器上的mono安装信息。


jexus


Linux下需要安装mono和jexus就可以运行起来,mono作为.net framework的linux运行环境,jexus作为web服务器。


Linux下的.NET MVC CMS(源码)


jexus配置,因为我的服务器上还有其他语言的站点,所以没有直接采用jexus对外服务。


nginx


Linux下的.NET MVC CMS(源码)


nginx代理了jexus的81端口,此地方不是必选,但是Nginx作为常规的代理软件,可以在服务器上跑.net、php、java等,各司其职,百花齐放。


bin文件夹说明


.NET MVC 3 在 Linux下的部署需要注意的是需要将项目下引用的dll都需要上传到bin目录下。并且还需要上传Microsoft.web.Infrastructure.dll,这个是发布mvc项目需要用的。可以对比下我webform下的Linux博客程序站点bin下只要引入Mono和Nvelocity这2个第三方dll,其他都是自己的业务程序,这个.net cms要的东西还挺多,下图是我的博客站点下的bin文件夹内容。


Linux下的.NET MVC CMS(源码)


Linux服务器上的的.net 程序问题




  • jexus不支持中文,所以文件上传的路径必须重写成字母加数字符号形式。



  • jexus web服务器是默认对大小写敏感的,所以部署的时候一定要只需要把 jws这个脚本文件中的 “export MONO_IOMAP=...”这一句前边的“#”去掉,就可以不区分大小写了



源码获取


https://github.com/robotbird/jqpress.cms


为了防止部分无法访问Github,所以放oschina的gitee上了


https://gitee.com/robotbird/jqpress.cms


后记


在开发这个cms的时候那时候.NET Core还没诞生,作为Linux下的.NET MVC项目还还是比较新颖的,只可惜没能好好的写代码,跑去做项目做产品去了,在这里开源出来缅怀写代码的岁月,如果对大家有用那最好不过了。


看完本文有收获?请转发分享给更多人

关注「DotNet」,提升.Net技能 


淘口令复制以下红色内容,再打开手淘即可购买





范品社,使用¥极客T恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)





推荐阅读
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • VPX611是北京青翼科技推出的一款采用6U VPX架构的高性能数据存储板。该板卡搭载两片Xilinx Kintex-7系列FPGA作为主控单元,内置RAID控制器,支持多达8个mSATA盘,最大存储容量可达8TB,持续写入带宽高达3.2GB/s。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
author-avatar
nnamyp_826
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有