热门标签 | 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恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)





推荐阅读
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • 揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节
    揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节 ... [详细]
  • 基于域名、端口和IP的虚拟主机构建方案
    本文探讨了在单台物理服务器上构建多个Web站点的虚拟主机方案,详细介绍了三种主要的虚拟主机类型:基于域名、基于IP地址和基于端口的虚拟主机。每种类型的实现方式及其优缺点均进行了深入分析,为实际应用提供了全面的技术指导。 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • 在数据库设计中,谨慎使用外键至关重要。本文探讨了九个关键原因,包括数据完整性的维护、性能优化、系统复杂性的管理、数据迁移的灵活性以及对外部系统的依赖性控制。通过深入分析这些因素,可以帮助开发人员和架构师做出更明智的设计决策,确保数据库系统的高效与稳定。 ... [详细]
  • 为了向用户提供虚拟应用程序,通常会在基础架构中部署StoreFront或Web Interface。为了确保安全的远程访问,通常需要在DMZ中配置Secure Gateway或Access Gateway。本文详细对比了这两种界面工具的功能特性,包括用户管理、安全性、性能优化等方面,为企业选择合适的解决方案提供了全面的参考。 ... [详细]
  • AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 在今天的Linux技能提升课程中,我们将深入探讨 `rm` 命令。`rm` 是一个强大的文件和目录删除工具,不仅可以删除文件,还可以通过添加 `-r` 选项递归删除目录。需要注意的是,`rm -r` 可以替代 `rmdir` 命令来删除空目录,但使用时需格外谨慎,因为误操作可能导致重要数据丢失。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • MongoDB核心概念与基础知识解析
    MongoDB 是一种基于分布式文件存储的非关系型数据库系统,主要采用 C++ 语言开发。本文将详细介绍 MongoDB 的核心概念和基础知识,包括其与传统 SQL 数据库的区别,数据库及集合的基本操作,如数据的插入、更新、删除和查询等。通过本文,读者可以全面了解 MongoDB 的基本功能及其应用场景。 ... [详细]
  • PHP编程中的命名规则与最佳实践 ... [详细]
  • 本文探讨了利用Python编程语言开发自动化脚本来实现文件的全量和增量备份方法。通过详细分析不同备份策略的特点,文章介绍了如何使用Python标准库中的os和shutil模块来高效地管理和执行备份任务。此外,还提供了示例代码和最佳实践,帮助读者快速掌握自动化备份技术,确保数据的安全性和完整性。 ... [详细]
  • 本文探讨了文件传输过程中的优化与安全策略。具体而言,研究了如何将客户端的文件高效上传至服务器。通过使用结构体对象,可以封装文件的相关信息,如位置和大小,并利用缓冲区存储实际数据,从而实现高效的数据传输。此外,文章还讨论了在传输过程中确保数据完整性和安全性的多种方法,包括加密技术和身份验证机制。 ... [详细]
  • 人人租机作为国内领先的信用免押租赁平台,为企业和个人提供全方位的新租赁服务。通过接入支付宝小程序功能,该平台实现了从零到百的迅猛增长,成为全国首家推出“新租赁小程序”开发服务的阿里巴巴小程序服务商(ISV)。这一创新举措不仅提升了用户体验,还显著增强了平台的市场竞争力。 ... [详细]
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社区 版权所有