.NET作品集:linux下的.net mvc cms
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域管理来实现的,整个项目结构还是比较清晰的。
路由设计

路由入口为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<PostInfo>)postlist;
}
model.IsDefault = 0;
return View(model.Category.ViewName,model);
}
模板引擎设计


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

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

因为要支持linux,所以sqlite的操作类需要using Mono.Data.Sqlite;
,当然可以在windows下切换过来,上面我写的切换方式太粗暴了,学过设计模式的同学应该分分钟能够重构出来,切换windows和linux简直不要太方便。
数据库结构

jq_category分类及标签表jq_comments评论表jq_links友链及导航设置jq_posts文章表jq_sites站点访问统计数字及文章、分类、数量统计表jq_users账户表
数据库结构跟之前的 博客程序没差别,只是部分表结构字段有所差别
运行
vs2017调试模式预览
cms首页

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

后台首页

文章列表

文章编辑

linux下的部署方式
mono

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

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

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

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

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项目还还是比较新颖的,只可惜没能好好的写代码,跑去做项目做产品去了,在这里开源出来缅怀写代码的岁月,如果对大家有用那最好不过了。
如果对源码感兴趣可以联系qq:330296409
.NET作品集:linux下的.net mvc cms的更多相关文章
- net mvc cms
.NET作品集:linux下的.net mvc cms cms程序架构 本程序是主要是用于企业网站开发的,也可以做博客程序,程序是从之前上一篇的.net 博客程序改进过来的,主要技术由webfor ...
- Linux~上部署.net MVC出现的问题与解决
这几天一直在搞linux下面的.net mvc的部署工作,遇到了很多问题,还好有一些朋友的帮助,问题才得到了解决! 环境:Linux+Mono+Jexus 希望的结果:直接运行windows+vist ...
- .NET作品集:linux下的博客程序
博客程序架构 本博客程序是博主11年的时候参考loachs小泥鳅博客内核开发的.net跨平台博客cms,距今已有6年多了,个人博客网站一直在用,虽然没有wordpress那么强大,但是当时在深究.ne ...
- linux下使用supervisor启动.net core mvc website的配置
发布好的asp.net core mvc项目, 如果想在window或linux下的以控制台程序启动的话,可以用下面的命令 dotnet MyProject.dll --urls="http ...
- Linux下Rsync+sersync实现数据实时同步
inotify 的同步备份机制有着缺点,于是看了sersync同步,弥补了rsync的缺点.以下转自:http://www.osyunwei.com/archives/7447.html 前言: 一. ...
- Linux下多任务间通信和同步-信号
Linux下多任务间通信和同步-信号 嵌入式开发交流群280352802,欢迎加入! 1.概述 信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式.信号可以直接进行用户空间进程和内核进程之间的 ...
- Demo+在Linux下运行(CentOS7+dotnetcore sdk)
来份ASP.NET Core尝尝 0x01.前言 学习ASP.NET Core也有一段时间了,虽说很多内容知识点还是处于一知半解的状态,但是基本的,还是 略懂一二.如果有错误,还望见谅. 本文还是和之 ...
- 浅谈Linux下如何修改IP
linux 下命令之浅谈//cd .. //返回上一级//创建文件夹touch test.txt//Linux不区分大小写//往一个文件中追加内容echo "****" > ...
- 10分钟学会在windows/Linux下设置ASP.Net Core开发环境并部署应用
创建和开发ASP.NET Core应用可以有二种方式:最简单的方式是通过Visual Studio 2017 来创建,其优点是简单方便,但需要安装最新版本Visual Studio 2017 prev ...
随机推荐
- Photoshop颜色出现比较大的偏差,偏色严重,显示器配置文件2351似乎有问题
其实出现这个问题是因为 显示器的配置问题.并不是PS版本或者电脑系统问题. 一般在你首次启动PS的时候会出现提示:显示器配置文件2351似乎有问题. 如果你点击了继续运行那以后你使用PS打开任何文件都 ...
- ABP框架个人开发实战(1)_环境搭建
前言 之前关注ABP框架有一阵子了,一直没有潜下心来实际研究一下.最近想自己建站,以后有自己的功能开发项目,可以在自己的站点上开发,并一步步的完善,所以找个比较好用的框架迫在眉睫,选来选去,决定用AB ...
- Servlet 学习笔记
Servlet 运行在服务器上的 java 类: Servlet 容器为 javaWeb 应用提供运行时环境,负责管理 servlet 和 jsp 生命周期,以及管理他们的共享数据. 现在我们知道了 ...
- Python学习--语句
一.print 和 import print 打印多个表达式,用逗号隔开 >>> print 'ab','cd' ab cd import import somemodule fro ...
- Maven 项目pom.xml报错
Maven项目报 Failure to transfer org.apache.maven.plugins:maven-*-plugin:pom 原因是maven的plugin并未下载到本地 或者本地 ...
- API设计相关
来自HeroKu的HTTP API 设计指南 http://get.jobdeer.com/343.get https://github.com/interagent/http-api-design ...
- 第2篇 C#数据类型-值类型与引用类型
一 C#内存分配 在应用程序与操作系统之间有一个"中间人"--公共语言运行时(Common Language Runtime,CLR).它为应用程序提供内`存管理,线程管理和远程处 ...
- mybatis简单搭建
背景 闲来没事把mybatis再熟悉一下,可能之前自己搭过没有记录.mybatis其实就是一个orm框架,在我们之前做.net工作的时候,我们的ef,dapper等都是这样的框架,java现在web流 ...
- python 面对post分页爬虫
分享一则对于网抓中面对post请求访问的页面或者在分页过程中需要post请求才可以访问的内容! 面的post请求的网址是不可以零参访问网址的,所以我们在网抓的过程中需要给请求传表单数据,下面看一下网页 ...
- JAVA基础面试(一)
1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...