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





推荐阅读
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 程序员妻子吐槽:丈夫北漂8年终薪3万,存款情况令人意外
    一位程序员的妻子在网上分享了她丈夫在北京工作八年的经历,月薪仅3万元,存款情况却出乎意料。本文探讨了高学历人才在大城市的职场现状及生活压力。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
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社区 版权所有