【ASP.NET Core】- 搭建MVC框架
1、使用最新版本的VS2017,并安装.NET Core2.0中相关开发工具
2、打开VS2017,点击文件-新建-项目,选择.NET Core中的ASP.NET Core Web 应用程序
3、由于我们是从零开始搭建MVC框架,因此我们选择创建一个空模板
4、创建完后,我们可以看到初始文件里面有这么几个文件
内部文件简介:
Properties&launchSettings.json 是一个启动配置文件,其用于应用的启动准备工作,包括环境变量,开发端口等。
wwwroot是一个用于存放静态内容的文件夹(例如存放css、js、图片等文件)。
我们可以通过依赖项安装各种依赖(如NuGet、等)。
至于Program.cs和Startup.cs等下我们再讲
5、编写Program.cs
public class Program
{
public static void Main(string[] Args)
{
BuildWebHost(Args).Run();
}//void Main(string[] Args) public static IWebHost BuildWebHost(string[] Args)
{
return WebHost.CreateDefaultBuilder(Args).UseStartup<Startup>().Build();
}//IWebHost BuildWebHost(string[] Args) }//class Program
ASP.NET Core是通过一个控制台应用来创建一个Web应用,其中Program类是项目的启动项,其会为我们创建并初始化Web应用,并通过Startup类中的ConfigureServices和Configure方法,完成依赖注入和中间件管道的搭建。
备注:1、请切勿将WebHost.CreateDefaultBuilder(Args).UseStartup().Build()方法直接写到Main方法内,否则将无法使用ADO.NET Entity Framework中的迁移指令;
6、初步编写Startup.cs
public class Startup
{ public void ConfigureServices(IServiceCollection ServiceCollection)
{ }//void ConfigureServices(IServiceCollection ServiceCollection) public void Configure(IApplicationBuilder ApplicationBuilder, IHostingEnvironment HostingEnvironment)
{ }//void Configure(IApplicationBuilder ApplicationBuilder, IHostingEnvironment HostingEnvironment) }//class Startup
Startup类是ASP.NET Core中初始化时最重要的设置类,我们可以在其ConfigureServices方法中注册所需的Service以此完成依赖注入,同时可以在Configure中注册所需的中间件以此完成管道的搭建。
备注:1、Configure的方法参数中必需含有IApplicationBuilder接口,而至于其他的接口或Service必须在ConfigureServices方法中注册后才能添加;2、ASP.NET Core默认会为我们注册一些Service,例如IHostingEnvironment、ILoggerFactory等;
7、创建Controllers、Models、Views
8、在Views文件夹中添加_Layout.cshtml
<!DOCTYPE html>
<html lang="zh-CN">
<head>
</head>
<body>
<div>
@RenderBody()
</div>
</body>
</html>
选择Views文件夹,右键-添加-新建项,选择MVC视图页,添加_Layout.cshtml文件,该文件将被作为一个母版页。当然我们也可以在其中添加其他相应的标签。
其中RenderBody的方法会渲染其他子Views中的内容。
备注:1、在布局页面也有节的概念,如果需要使用,则需使用RenderSection方法;
9、在Views文件夹中添加_ViewStart.cshtml
@{
Layout = "~/Views/_Layout.cshtml";
}
选择Views文件夹,右键-添加-新建项,选择MVC视图页,添加_ViewStart.cshtml文件。该文件必需添加在Views目录下,且必需为_ViewStart.cshtml,这是被微软的MVC框架中写死的(实际上也可以修改,只是比较麻烦)。
_ViewStart.cshtml是MVC框架中View的启动文件,这是MVC框架中必需要有的,我们可以在这里指定母版页_Layout.cshtml的路径。
10、在Views文件夹中添加_ViewImports.cshtml
@using SinDynasty
@using SinDynasty.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
选择Views文件夹,右键-添加-新建项,选择MVC视图页,添加_ViewImports.cshtml文件。由于我们在View中使用的是Razor语法,在使用Razor语法时,我们就可能会引用一些C#代码,这时我们就需要声明这些C#代码中所引用到的命名空间、类。为了方便,我们可以在_ViewImports.cshtml文件中对某些命名空间进行引用,这样我们就不必对每个View都引用一遍相同的命名空间了。
11、在Controllers文件夹下创建HomeController.cs
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}//IActionResult Index() }//class HomeController : Controller
选择Controllers文件夹,右键-添加-新建项,选择MVC控制器类,添加HomeController.cs。
所有的Controller都应该以Controller结尾,且必须都继承Controller。其中View方法将返回一个ViewResult,MVC将通过这个ViewResult来显示相应的View。View方法有多个重载,在示例里使用了无参数的重载,其将会显示View/Controller名称的简写/方法名.cshtml。
备注:1、所有的Controller都必须为public
12、在Models文件夹下创建HomeModel.cs
public class HomeModel
{ }//class HomeModel
选择Models文件夹,右键-添加-新建项,选择类,添加HomeModel.cs。
备注:1、在这个简单示例中,并不需要Model,在这儿写只是说明如何去创建Models;2、所有的Model都必须为public,否则将无法在View中引用;
13、在Views目录下创建HomeController中的Index视图。
<h1>
Hello,World!!!
</h1>
选择Views文件夹,右键-添加-新建文件夹,从而创建出一个Home文件夹,然后选择Home文件夹,右键-添加-新建项,选择MVC视图页,添加Index.cshtml文件。
14、注册MVC服务
public void ConfigureServices(IServiceCollection ServiceCollection)
{
ServiceCollection.AddMvc();
}//void ConfigureServices(IServiceCollection ServiceCollection)
在Startup类中的ConfigureServices方法中,调用MvcServiceCollectionExtensions类里的AddMvc方法(AddMvc方法是IServiceCollection的一个拓展方法,具体的等以后将ASP.NET Core中的依赖注入时再讲)。
15、注册MVC中间件,并配置路由规则
public void Configure(IApplicationBuilder ApplicationBuilder, IHostingEnvironment HostingEnvironment)
{
ApplicationBuilder.UseMvc((RouteBuilder)=> { RouteBuilder.MapRoute("SinDynasty", "{Controller}/{Action}/{Parameter}", new { @Controller = "Home", @Action = "Index", @Parameter = String.Empty }); });
}//void Configure(IApplicationBuilder ApplicationBuilder, IHostingEnvironment HostingEnvironment)
注册MVC中间件时,我们调用的是MvcApplicationBuilderExtensions类中的IApplicationBuilder的拓展方法UseMvc方法。由于我们创建的是一个完整的Web应用,而不是一个WebAPI,因此我们还需要配置相应的路由规则。
在UseMvc方法中有一个可以带有Action的重载方法,我们可以在该Action上进行路由规则的配置。
Action在这里我们使用一个Lambda表达式(RouteBuilder)=>{ }来表示。RouteBuilder表示的是一个IRouteBuilder接口。
配置路由规则,我们可以调用MapRouteRouteBuilderExtensions类中的IRouteBuilder的拓展方法MapRoute来进行。
MapRoute也有多个重载,在这里我所用的重载的第一个参数表示的是路由规则的名称,第二个参数表示的是路由规则,第三个参数表示的是初始默认的路由规则。
参数1:由于我们可以有多个路由规则,因此我们需要对这些路由规则加以命名已做区分;
参数2:表示的是一个路由规则,在这里我使用的规则是“Controller名称的简写/方法名/路由参数”;
参数3:表示的是初始默认的路由,在这里我设置的初始路由就是"Home/Index/",在这里使用了一个匿名类来表示;
16、这样我们就创建并搭建完毕了
【ASP.NET Core】- 搭建MVC框架的更多相关文章
- Asp.net Core基于MVC框架实现PostgreSQL操作
简单介绍 Asp.net Core最大的价值在于跨平台.跨平台.跨平台.重要的事情说三遍.但是目前毕竟是在开发初期,虽然推出了1.0.0 正式版,但是其实好多功能还没有完善.比方说编译时的一些文件编码 ...
- VS2017创建一个 ASP.NET Core2.0 应用,并搭建 MVC 框架
https://testerhome.com/topics/11747 1.使用最新版本的VS2017,并安装.NET Core2.0中相关开发工具 2.打开VS2017,点击文件-新建-项目,选 ...
- ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 使用 EF 框架查询数据 上一章节我们学习了如何设置 ...
- ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 EF 框架服务 上一章节中我们了解了 Entity ...
- ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 MVC 前面几章节中,我们都是基于 ASP.NET 空项目 ...
- asp.net core的DI框架思考以及服务实例的获取方式总结
转载请注明出处: https://home.cnblogs.com/u/zhiyong-ITNote/ 整个asp.net core管道从WebHostBuilder到WebHost到后续请求的类中, ...
- 基于ASP.NET core的MVC站点开发笔记 0x01
基于ASP.NET core的MVC站点开发笔记 0x01 我的环境 OS type:mac Software:vscode Dotnet core version:2.0/3.1 dotnet sd ...
- .NET Core RC2发布在即,我们试着用记事本编写一个ASP.NET Core RC2 MVC程序
在.NET Core 1.0.0 RC2即将正式发布之际,我也应应景,针对RC2 Preview版本编写一个史上最简单的MVC应用.由于VS 2015目前尚不支持,VS Code的智能感知尚欠火候,所 ...
- 如何基于asp.net core的Identity框架在mysql上作身份验证处理
首先了解这个概念,我一开始也是理解和掌握基本的概念,再去做程序的开发.Identity框架是微软自己提供,基于.net core平台,可拓展.轻量 级.面向多个数据库的身份验证框架.IdentityS ...
随机推荐
- python -- 简单配置发送邮件功能
本文用第三方类库:yagmail 实现:以QQ邮箱作为发送邮箱为例.最终的实现效果:给指定邮箱,发送指定内容的邮件. 准备工作 1.用于发送邮件的账号信息 比如账号用自己的qq邮箱,但'密码'需要在邮 ...
- BZOJ1303_中位数图_KEY
题目传送门 较水,开两个桶即可. 题目可以理解为,将大于B的数看为1,小于B的数看为-1,将以B这个数为中位数的序列左右分为两半,加起来为0. code: #include <cstdio> ...
- Nodejs中的流
Nodejs中的很多地方都用到了流,流是一个很常见的概念,一个http请求,控制台输入输出的形式都是流.流可以分为三种: 可读流 可写流 既能读又能写 其中第三种流又可以分为全双工流Duplex和转换 ...
- 【Keras案例学习】 CNN做手写字符分类(mnist_cnn )
from __future__ import print_function import numpy as np np.random.seed(1337) from keras.datasets im ...
- 算法------------数组----------------两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...
- 使用vs code写php及调试
原文来自:http://www.cnblogs.com/CLR010/p/5276077.html 首页先改下php.ini 一般是在最底部,有就修改没有就加上去下面的配置: xdebug.remot ...
- jmeter关联三种常用方法
在LR中有自动关联跟手动关联,但在我看来手动关联更准确,在jmeter中,就只有手动关联 为什么要进行关联:对系统进行操作时,本次操作或下一次操作对服务器提交的请求,这参数里边有部分参数需要服务器返回 ...
- 【转】MMO即时战斗:地图角色同步管理和防作弊实现
---转自CSDN 一.前言 无论是端游.页游.手游如果是采用了MMO即时战斗游戏模式,基本都会遇到同屏多角色实时移动.释放技能.战斗等场景,于是自然也需要实现如何管理同屏内各种角色的信息同步:例如角 ...
- netty in action 笔记 二
netty的数据容器 网络数据的基本单位大多为字节,Java NIO 提供了ByteBuffer 作为它的字节容器,但使用起来过于复杂和繁琐.在Netty中, ByteBuffer 替代品是ByteB ...
- C++ ifndef /define/ endif 作用和用法
ifndef/define/endif”主要目的是防止头文件的重复包含和编译 比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题 ...