开始

在上一篇文章: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

程序的一个顺序如下:

  1. 先添加所有mvc运行需要依赖的东西到servicecollection里面去。包括Controller、Views等。MvcServiceCollectionExtensions.cs

  2. 添加路由支持,然后根据路由实现的中间件来驱动控制器的动作。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相关推荐

  1. dotnet core 开发体验之Routing

    开始 回顾上一篇文章:dotnet core开发体验之开始MVC 里面体验了一把mvc,然后我们知道了aspnet mvc是靠Routing来驱动起来的,所以感觉需要研究一下Routing是什么鬼. ...

  2. vs2017 js cordova + dotnet core 开发app

    原文:vs2017 js cordova + dotnet core 开发app 1.记得在index.html加入 <meta http-equiv="Content-Securit ...

  3. dotnet core 开发无缝兼容Http和Websocket协议的接口服务

    在应用接口开发中往往要针对不同协义开发相应的代理服务,但对于Websocket和http这两种协议来说就有些不同,从实现上来看Websocket可以说是Http的升级子协议, 两者在协议处理上基本一致 ...

  4. ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

    ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...

  5. MongoDB via Dotnet Core数据映射详解

    用好数据映射,MongoDB via Dotnet Core开发变会成一件超级快乐的事.   一.前言 MongoDB这几年已经成为NoSQL的头部数据库. 由于MongoDB free schema ...

  6. dotnet core 微服务教程

    这个教程主要是对于第一次使用dotnet core开发的同学. 运行环境是在centos 7 , 使用了docker容器. 即这是一篇运行在linux的docker容器上的微服务的简单应用. 一. 安 ...

  7. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

  8. 基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始

    0x00 简介 DotBPE.RPC是一款基于dotnet core编写的RPC框架,而它的爸爸DotBPE,目标是实现一个开箱即用的微服务框架,但是它还差点意思,还仅仅在构思和尝试的阶段.但不管怎么 ...

  9. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Mac OS

    除了微软自家的Windows平台, .NET Core针对Mac OS以及各种Linux Distribution(RHEL.Ubuntu.Debian.Fedora.CentOS和SUSE等)都提供 ...

最新文章

  1. 有一个5 * 5的二维数组,保留主对角线上的元素,并使其他元素均为0,要求用函数和子函数完成
  2. TikTok广告投放指南(基础入门)
  3. vue入门基础篇笔记1
  4. 业界 | 5个步骤开启你的数据科学职业生涯!(附链接)
  5. 基于busybox构建rootfs
  6. 【转载】可复用的FS
  7. 【HDU - 5914 】Triangle (打表 或 set维护)
  8. Summarize to the Power of Two(CF-1005C)
  9. pg数据库有雷锋?用户已有权限为何无故消失?
  10. (7)FPGA十大设计思想(第2天)
  11. WebService处理Map
  12. 【Debug探索团队公告】Debug探索团队,邀请您的加入
  13. kettle增加字段报错_【Kettle 多文件】Excel/MySQL文件传入解决方案
  14. First flight, Let's do it!
  15. ECMAScript 学习笔记03
  16. 【转】用户空间编写驱动程序
  17. 计算机一级在线考试软件,全国计算机等级考试一级MS OFFICE练习软件
  18. Nginx部署ssl安全证书(腾讯云DV证书)
  19. 这是我见过最好的唐诗,而且通俗易懂5
  20. CSS-设置表格样式

热门文章

  1. 创建第一个WCF程序
  2. asp.net 得到上一页地址
  3. Lucifer的一场暴强围英雄表演
  4. asp.net core 6 新特性,支持HTTP/3 端点发布
  5. 面试官:Redis 内存数据满了,会宕机吗?
  6. 又到618,.NET 千万级秒杀架构到底有多牛
  7. asp.net core 自定义 Content-Type
  8. 程序员是终身学习的职业,应该怎么学习?
  9. C#9.0 终于来了,带你一起解读 nint 和 Pattern matching 两大新特性玩法
  10. 使用.net core3.0 正式版创建Winform程序