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