開源地址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