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





推荐阅读
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • MVC模式下的电子取证技术初探
    本文探讨了在MVC(模型-视图-控制器)架构下进行电子取证的技术方法,通过实际案例分析,提供了详细的取证步骤和技术要点。 ... [详细]
  • 在Android应用开发过程中,开发者经常遇到诸如CPU使用率过高、内存泄漏等问题。本文将介绍几种常用的命令及其应用场景,帮助开发者有效定位并解决问题。 ... [详细]
  • 在中标麒麟操作系统上部署达梦数据库及导入SQL文件
    本文档详细介绍了如何在中标麒麟操作系统上安装达梦数据库,并提供了导入SQL文件的具体步骤。首先,检查系统的发行版和内核版本,接着创建必要的用户和用户组,规划数据库安装路径,挂载安装介质,调整系统限制以确保数据库的正常运行,最后通过图形界面完成数据库的安装。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 本文总结了软件工程课程M1和M2阶段的个人收获,包括项目开发中的技术学习、团队协作及管理经验。同时,对《构建之法》一书中的相关问题进行了理解和分析。 ... [详细]
  • Django与Python及其他Web框架的对比
    本文详细介绍了Django与其他Python Web框架(如Flask和Tornado)的区别,并探讨了Django的基本使用方法及与其他语言(如PHP)的比较。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
  • 在运行于MS SQL Server 2005的.NET 2.0 Web应用中,我偶尔会遇到令人头疼的SQL死锁问题。过去,我们主要通过调整查询来解决这些问题,但这既耗时又不可靠。我希望能找到一种确定性的查询模式,确保从设计上彻底避免SQL死锁。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
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社区 版权所有