dotnet core开发体验之开始MVC
開始
在上一篇文章:dotnet core多平臺開發體驗?,體驗了一把dotnet core 之后,現在想對之前做的例子進行改造,想看看加上mvc框架是一種什么樣的體驗,于是我就要開始誕生今天的這篇文章來分享我的感受了。
一、項目改造加入mvc框架
首先我們先修改project.json文件,加入mvc框架的依賴、添加發布時候的發布的包含內容、還有就是編譯選項,修改前后的對比如下圖。
第二我們對Startup.cs進行修改,以讓能加載mvc框架進行工作。如下圖,把我們原來輸出到頁面的內容給刪除掉,修改成使用mvc并配置mvc的路由信息。同時還需要把mvc給加入到services里面。
第三我們要添加下 視圖和控制器,創建Controllers和Views兩個目錄。并且添加HomeController控制器和它對應的視圖。
HomeController.cs的內容
using Microsoft.AspNetCore.Mvc;namespace LearnDotnetCore.Controllers{
? ?public class HomeController : Controller{ ? ?
? ? ? ?public IActionResult Index() ? ? ?
? ? ? ?{ ? ? ? ? ?
? ? ? ? ?return View();}} }
Home/Index.cshtml的內容
Hello from ASP.NET Core MVC! ?到這里改造加入的內容已經完成了,然后輸入命令來下載依賴包和編譯運行
dotnet restore
dotnet run
Project LearnDotnetCore (.NETCoreApp,Version=v1.0) will be compiled because inputs were modified Compiling LearnDotnetCore for .NETCoreApp,Version=v1.0Compilation succeeded. ? ?0 Warning(s) ? ?0 Error(s)Time elapsed 00:00:04.0228759Hosting environment: Production Content root path: /Users/caipeiyu/Documents/code/c#/LearnDotnetCore Now listening on: http://localhost:5000Application started. Press Ctrl+C to shut down.輸入上面兩個命令后,顯示編譯成功,并運行起來。 然后打開瀏覽器輸入地址http://localhost:5000/ 瀏覽器顯示內容?Hello from ASP.NET Core MVC!。到這里我們已經成功的給添加上mvc框架,并且很好的運行起來,但是界面好像挺單調,可以添加點其他的內容讓顯示充實的。添加mvc框架進來如此的簡單,內容如此的少,文章到這里結束肯定不是我的風格了,篇幅不夠放首頁等下不小心就被移除了,這肯定是不能忍受的啦。下面可以來研究下這個mvc的簡單運行原理然后分享一下,怎么說也得湊點字數。
二、ASP.NET Core MVC運行原理初探
首先我們先了解一下什么是mvc模式,什么是mvc框架。其實像我們經常說的mvc很多講的都是這么一個mvc框架,而不是講的什么mvc模式。
需要明白的一點是?MVC模式(Model–view–controller)是軟件工程中的一種軟件架構模式,而aps.net mvc是一種對mvc模式實現的一個框架。
參考資料:https://zh.wikipedia.org/wiki/MVC
自己實現簡單的mvc
在一開始,假設我們沒有?asp.net mvc 框架?那么我們自己想要實現一個mvc模式的話,那么我們能如何去實現呢?
首先我們來新建一個web項目,如果像前面那樣用dotnet new建立一個項目然后再改造,感覺還是比較麻煩。這里有另一種建議,使用Yeoman 來新建立項目,參考:https://docs.asp.net/en/latest/client-side/yeoman.html?#building-projects-with-yeoman
安裝細節這里不做翻譯介紹,請自行研究。安裝完這個東西后,我們可以新建立一個Empty Web Application項目。建立完成項目后,我們可以來建立一個mvc實現代碼。
首先我們可以建立一個 Model
public class MyModel{ ? ?? ? public string Name{get;set;} }
然后建立一個 View
using Microsoft.AspNetCore.Http;public class MyView{ ?
?private MyModel _model; ?
?
??public MyView(MyModel model){_model = model;} ? ?
??
??public async System.Threading.Tasks.Task Show(HttpContext context) ? ?{ ? ? ? ?await context.Response.WriteAsync($"Hello {_model.Name}");} }
最后建立一個Controller
public class MyController{ ??public MyView Index(){MyModel model = new MyModel(){Name="I am Home!"}; ? ? ? ?return new MyView(model);} ?
?
? ?public MyView About(){MyModel model = new MyModel(){Name="I am About"}; ? ? ? ?return new MyView(model);}}
建立完成后,我們就可以在入口處調用我們Controller,入口為Startup類的方法Configure里面的app.Run修改代碼如下
? ?public void Configure(IApplicationBuilder app) ? ?{MyController controller = new MyController();app.Run(async (context) =>{ ? ? ? ? ? ?switch (context.Request.Path.Value){ ? ? ? ? ? ? ? ?case "/about": ? ? ? ? ? ? ?? ? ? ? ?await controller.About().Show(context); ? ? ? ?
? ? ? ? ? ? ? ? ? ? ?break; ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ??default: ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ??? ? ? ?await controller.Index().Show(context); ? ? ? ? ? ? ? ? ? ?break;}});}
再運行 dotnet run,啟動成功后,在瀏覽器里面輸入http://localhost:5000/ 就顯示 Hello I am Home! 輸入http://localhost:5000/about?就顯示 Hello I am About,如上,就是我們實現了最簡單的一個mvc。看到這里,可能還是很多人一頭霧水那asp.net mvc里面是怎么一回事呀。
aspnet mvc運行初步解析
想知道aspnet mvc的模型是如何工作起來的,最簡單有效的辦法就是去看它的源碼,參考源碼:https://github.com/aspnet/Mvc
程序的一個順序如下:
先添加所有mvc運行需要依賴的東西到servicecollection里面去。包括Controller、Views等。MvcServiceCollectionExtensions.cs
添加路由支持,然后根據路由實現的中間件來驅動控制器的動作。MvcApplicationBuilderExtensions.cs
在添加路由支持的源碼里面我們可以看到有一句代碼
var routes = new RouteBuilder(app) {DefaultHandler = app.ApplicationServices.GetRequiredService<MvcRouteHandler>(), };從這個代碼我們不難看到路由的驅動入口就是?MvcRouteHandler,在這個類里面調用方法public Task RouteAsync(RouteContext context),這個方法主要是根據路由提供的數據來選擇是要執行哪個控制器和控制器里面的方法。具體的實現可以參考ControllerActionInvoker.cs
整個mvc運行起來的大概原理也就是這樣,感覺好像也沒有特別的復雜。至于這個mvc框架里面的依賴是如何注入,如何在調用到時取出來就不屬于本文的范圍。然后對路由內部的實現有興趣的可以參考源碼:https://github.com/aspnet/Routing
由于每一個人對知識的掌握范圍的不同,可能單純閱讀代碼是無法明白是什么意思,那么可以把源碼下載下來,然后在我說到的這幾個方法里面加斷點看看每一個變量是怎么樣的,可能會更好的輔助理解。更仔細的內容我將會在今后的文章里面進行介紹。本文結束。
相關文章:
ASP.NET Core 1.0 入門——了解一個空項目
ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)
.NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0簡介
云服務器下ASP.NET Core 1.0環境搭建(包含mono與coreclr)
使用VS Code開發ASP.NET Core 應用程序
dotnet run是如何啟動asp.net core站點的
ASP.NET Core提供模塊化Middleware組件
“dotnet restore"和"dotnet run"都做了些什么?
探秘 dotnet run 如何運行 .NET Core 應用程序
.NET Portability Analyzer 已開源
ASP.NET Core的配置(1):讀取配置信息
ASP.NET Core的配置(2):配置模型詳解
.NET Core 1.0 RC2 歷險之旅
使用VS Code開發 調試.NET Core 應用程序
讓我們Core在一起:ASP.NET Core & .NET Core
.NET Core VS Code 環境配置
官方博客明確了 .NET Core RC2/RTM 時間表
.NET Core全新的配置管理[共9篇]
利用記事本創建一個ASP.NET Core RC2 MVC應用
微軟.NET 正式劈腿成功,橫跨所有平臺
.NET Core 1.0 CentOS7 嘗試
解讀發布:.NET Core RC2 and .NET Core SDK Preview 1
[.NET Core].NET Core R2安裝及示例教程
ASP.NET Core 開發-中間件(Middleware)
結合Jexus + Kestrel 部署 asp.net core 生產環境
通過Jexus 部署 dotnetcore版本MusicStore 示例程序
ASP.NET Core 中文文檔 第一章 入門
用 Visual Studio Code 在 macOS 上創建首個 ASP.NET Core 應用程序
用 Visual Studio 和 ASP.NET Core MVC 創建首個 Web API
用 Visual Studio 發布一個 Azure 云 Web 應用程序
ASP.NET Core MVC 與 Visual Studio 入門
第二章指南(4.2)添加 Controller
DotNet Core 介紹
asp.net core 中間件詳解及項目實戰
教你實踐ASP.NET Core Authorization(免看文檔教程)
asp.net core 使用 Redis 和 Protobuf 進行 Session 緩存
asp.net core 中間件詳解及項目實戰
第二章 指南(4.3)添加 View
原文地址:http://www.cnblogs.com/caipeiyu/p/5575158.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的dotnet core开发体验之开始MVC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dotnet core 开发体验之Rou
- 下一篇: Visual Studio Code五月