开源地址git
https://github.com/564064202/Moon.Mvc 欢迎加入开发github
.NET Core微软还在发力,但做为商用还有一段距离,不少开发库尚不能用于.NET Core,所以咱们尚未看到一个大型的使用案例,web
这时你们或许想到Mono部署ASP.NET MVC,但部署过的人必然知道:这不是一个容易的工做,须要各类工做,不太容易地完成这项工做.编程
.NET Core做为微软的新星,但还不够成熟强大,在其发出耀眼光辉以前,咱们分享一实战性强的开源MVC框架:windows
Moon.Mvc,便捷易用的跨平台Mvc框架,比微软的Mvc 更加短小精悍.缓存
Moon.Mvc是一套从ASP.NET底层(HttpHandler、HttpModule)着手开发的一套MVC框架.其中涉及模板引擎、Model自动化验证机制、路由注册、面向方面编程、客户端缓存等诸多功能.较微软发布的MVC而言,显得更加精简易用,并且能够无缝集成于其余现有.NET Web系统。服务器
这里不是要对人家说三道四,我们有事说事.框架
先上MVC的一段代码 测试
public ActionResult GetStudent(int id) { Student st = new Student(); st.Email = "q@q.com"; st.Name = "秦时明月" + DateTime.Now.ToShortDateString(); st.Password = "pwd"; st.PID = 23; st.Birth = DateTime.Now.AddYears(-10); st.Fa = new Father(); st.Fa.Age = 90; st.Fa.Name = "Father1"; st.Fa.Mother = new Mother() { Name = "mm", Age = 1002 }; return View(st); }
就此提出三点疑问this
1.代码重用率
以上的方法,我是否可以做为一个独立的业务功能用到其余地方??
2.自动化测试问题
以上的方法,入口有了,对于出口的测试工做是否方便?
若是,以上的MVC代码是这样的(相似于Web Api),岂不一举两得解决上述两点疑问.
public Student GetStudent(int id) { Student st = new Student(); st.Email = "q@q.com"; st.Name = "秦时明月<>" + DateTime.Now.ToShortDateString(); st.Password = "pwd"; st.PID = 23; st.Birth = DateTime.Now.AddYears(-10); st.Fa = new Father(); st.Fa.Age = 90; st.Fa.Name = "Father1"; st.Fa.Mother = new Mother() { Name = "mm", Age = 1002 }; return st; }
3.调试MVC源代码的便捷性
固然你说你能够把微软的MVC源代码拿进来作调试,但我也能够问你:你在十五钟以内可以将其集成到你的项目中进行调试吗?
4.MVC的跨平台部署繁琐
开篇就讲到这个问题,祝福那些折腾的朋友:生命在于折腾.
正如上文提到的内容,本框架开源解决这些问题,并且能够无缝集成到现有系统之中,做为相似于WebApi的使用方式来使用(免去模板引擎功能)
,例如你能够在WebForm项目中直接使用.最终的效果很明朗:一套代码不管是在IDE中仍是在IIS或Linux Web服务器上都能无缝运行.
简单来说,代码不管在哪一个平台都能很好调试、运行、无需繁琐的操做.
1.下载开发库
1.开源地址
http://pan.baidu.com/s/1slCMspR
2.动态连接库地址 (下方项目实例DEMO中有)
2. 引用动态连接库
1.引用Moon.Mvc动态连接库到项目中
2.根据你的须要引入Moon.Orm、FluentValidation
3.配置web.config文件
1)在<system.web>节点下配置以下内容
<pages pageParserFilterType="Moon.Mvc.ViewTypeParserFilter, Moon.Mvc"
pageBaseType="Moon.Mvc.MViewPage,Moon.Mvc" enableViewState="false" enableViewStateMac="false"
autoEventWireup="false"
>
<namespaces>
<add namespace="Moon.Mvc" />
<add namespace="System.Collections.Generic"/>
</namespaces>
</pages>
2)配置httpHandler
1.集成模式.(如今windows server基本上都用集成模式) configuration节点下直接使用以下配置
<system.webServer> <handlers> <add name="RequestHandler" path="*.htm" verb="*" type="Moon.Mvc.RequestHandler, Moon.Mvc" /> </handlers> </system.webServer>
2.经典模式(老版本IIS,包括xsp4 mono)
<system.web>
<httpHandlers> <add path="*.htm" verb="*" type="Moon.Mvc.RequestHandler, Moon.Mvc" /> </httpHandlers>
<system.web>
4. 开发项目文件结构
在项目根目录下添加Controllers文件夹(非必须),Views文件夹
如项目结构以下图所示,相似于微软MVC的结构,但路由注册确有些差异.
5.注册路由规则
这里有一个很简便的方式,直接经过一行代码进行:咱们在Global.asax.cs文件中为Global类的Application_Start方法添加以下代码
protected void Application_Start(object sender, EventArgs e) { UrlRouteCenter.MapRouteBinPlugin("RbProject"); }
这样一切就OK了.
6.设置项目默认页面
一样在Global中添加
protected void Application_BeginRequest(object sender, EventArgs e) { UrlRouteCenter.SetDefaultRoute<RbProject.Controllers.HomeController>(this,"Index"); }
7.添加控制器
咱们能够经过继承Moon.Mvc.BaseController的方式,使一个类成为一个控制器,
其中的每个public方法能够做为Action.形以下图
public class HomeController :BaseController { [Get] [TemplateResult]//默认采用~/Views/Home/Index.aspx的文件做为视图文件 public User Index() { ViewData["CurrentRootUrl"]=ROOT_URL; return new User(){Name="test",Age=12}; } }
若是要让一个控制器属于一个Area,能够在这个类上应用Area特性,形如:
[Area("Back")] public class AdminController:BaseController { }
8.编译项目而后在Linux上部署运行(Windows上就不用说了)
这里咱们推荐使用Mono团队的XSP4(一个相似于IIS的托管宿主),采用UBuntu LTS版本
在终端中运行以下命令:
sudo apt install mono-xsp
若是没有安装mono,请安装mono(sudo apt install mono-runtime)
安装完毕以后,把编译好的项目复制到一个Linux目录下,而后在项目根目录中右键打开终端
输入命令 sudo xsp ,这时候项目就跑起来了,端口默认9000,若是须要进一步了解xsp,请看以下
官方连接:
http://www.mono-project.com/docs/web/aspnet/
由于时间精力问题,如今不能对每个模块进行说明,以后有时间对他们进行一一说明.例如底层实现原理,以及模板引擎、Model自动化验证机制、路由注册、面向方面编程、客户端缓存等诸多功能.后续文章陆续进行说明,你们能够经过给出的项目Demo和源代码先自行阅读.
如下项目是一网友的一个类威客任务的一个平台,BS/CS整合项目,服务端采用Moon.Mvc开发,
能够直接部署在Linux上
http://pan.baidu.com/s/1jHQX3fS (直接能够运行在Linux和Windows上)
欢迎加入交流群: 216965349