内部文件简介:
Properties&launchSettings.json 是一个启动配置文件,其用于应用的启动准备工作,包括环境变量,开发端口等。
wwwroot 是一个用于存放静态内容的文件夹(例如存放 css、js、图片等文件)。
我们可以通过依赖项安装各种依赖(如 NuGet、等)。
至于 Program.cs 和 Startup.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 中的迁移指令;
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 等;
<!DOCTYPE html>
<html lang="zh-CN">
<head>
</head>
<body>
<div>
@RenderBody()
</div>
</body>
</html>
选择 Views 文件夹,右键 - 添加 - 新建项,选择 MVC 视图页,添加_Layout.cshtml 文件,该文件将被作为一个母版页。当然我们也可以在其中添加其他相应的标签。
其中 RenderBody 的方法会渲染其他子 Views 中的内容。
备注:1、在布局页面也有节的概念,如果需要使用,则需使用 RenderSection 方法;
@{
Layout = "~/Views/_Layout.cshtml";
}
选择 Views 文件夹,右键 - 添加 - 新建项,选择 MVC 视图页,添加_ViewStart.cshtml 文件。该文件必需添加在 Views 目录下,且必需为_ViewStart.cshtml,这是被微软的 MVC 框架中写死的(实际上也可以修改,只是比较麻烦)。
_ViewStart.cshtml 是 MVC 框架中 View 的启动文件,这是 MVC 框架中必需要有的,我们可以在这里指定母版页_Layout.cshtml 的路径。
@using SinDynasty
@using SinDynasty.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
选择 Views 文件夹,右键 - 添加 - 新建项,选择 MVC 视图页,添加_ViewImports.cshtml 文件。由于我们在 View 中使用的是 Razor 语法,在使用 Razor 语法时,我们就可能会引用一些 C# 代码,这时我们就需要声明这些 C# 代码中所引用到的命名空间、类。为了方便,我们可以在_ViewImports.cshtml 文件中对某些命名空间进行引用,这样我们就不必对每个 View 都引用一遍相同的命名空间了。
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
public class HomeModel
{
}//class HomeModel
选择 Models 文件夹,右键 - 添加 - 新建项,选择类,添加 HomeModel.cs。
备注:1、在这个简单示例中,并不需要 Model,在这儿写只是说明如何去创建 Models;2、所有的 Model 都必须为 public,否则将无法在 View 中引用;
<h1>
Hello,World!!!
</h1>
选择 Views 文件夹,右键 - 添加 - 新建文件夹,从而创建出一个 Home 文件夹,然后选择 Home 文件夹,右键 - 添加 - 新建项,选择 MVC 视图页,添加 Index.cshtml 文件。
public void ConfigureServices(IServiceCollection ServiceCollection)
{
ServiceCollection.AddMvc();
}//void ConfigureServices(IServiceCollection ServiceCollection)
在 Startup 类中的 ConfigureServices 方法中,调用 MvcServiceCollectionExtensions 类里的 AddMvc 方法(AddMvc 方法是 IServiceCollection 的一个拓展方法,具体的等以后将 ASP.NET Core 中的依赖注入时再讲)。
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/",在这里使用了一个匿名类来表示;