1. ASP.NET Core MVC
1.1. 概述
ASP.NET Core MVC 框架是轻量级、开源、高度可测试的演示框架,并针对 ASP.NET Core 进行了优化。
ASP.NET Core MVC 提供一种基于模式的方式,用于生成可彻底分开管理事务的动态网站。
1.1.1. 执行过程
1.1.2. 中间件执行过程:
启动的时候先执行该中间件类的构造函数,然后一路 Next() ;下去,返回的时候,正好是反向的,执行的是该类的逻辑部分:
1.1.3. AOP 切面
1.2. 创建MVC项目
1.2.1. 创建步骤
选择【创建新项目】
选择对应模板
配置名称和路径信息
选择框架版本并对项目进行配置:
执行应用程序,浏览器中查看如下所示:
1.2.2. Program
类似于控制台应用程序中的入口方法,web应用程序中【Program.cs】为入口起点
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// 程序启动时会调用 Startup 类
webBuilder.UseStartup<Startup>();
});
}
Main方法里面的内容主要是用来配置和运行程序的.
因为我们的web程序需要一个宿主, 所以 BuildWebHost 这个方法就创建了一个 WebHostBuilder.
我们还需要 Web Server.
ASP.NET Core 自带了两种 http servers, 一个是 WebListener, 它只能用于windows系统, 另一个是kestrel, 它是跨平台的.
上述【Program.cs】类中 CreateHostBuilder 方法的lambda写法相当于下面的写法:
public static IHostBuilder CreateHostBuilder(string[] args)
{
var builder = Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(web =>
{
web.UseStartup<Startup>();
});
return builder;
}
1.2.3. Startup
其实Startup算是程序真正的切入点.
Startup 类的 执行顺序:构造 -> ConfigureServices->Configure
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
不管你命名成什么,只要将 webBuilder.UseStartup<>()
中的泛型类配置成你定义的入口类即可。
构造函数
- IConfiguration:表示一组键/值应用程序配置属性。
- IHostingEnvironment:是一个包含与运行应用程序的Web宿主环境相关信息的接口。使用这个接口方法,我们可以改变应用程序的行为。
ConfigureServices
使用 ConfigureServices
方法将服务添加到容器。简单说,用于配置依赖注入
对于需要大量设置的功能,IServiceCollection 上有 Add{Service} 扩展方法。
例如,AddControllersWithViews、AddDefaultIdentity、AddEntityFrameworkStores 和 AddRazorPages
Configure 方法
Configure
方法用于指定应用响应 HTTP 请求的方式。简单说,用于设置中间件、路由规则等
- IApplicationBuilder:是一个包含与当前环境相关的属性和方法的接口。它用于获取应用程序中的环境变量。
1.2.4. 路由
大多数应用应选择基本的描述性路由方案,让 URL 有可读性和意义。
默认传统路由 {controller=Home}/{action=Index}/{id?}:
- 支持基本的描述性路由方案。
- 是基于 UI 的应用的有用起点。
中间件 RouterMiddleware 的路由注册方式大致分为两种:
- 全局注册。如:MapRoute。
- 局部注册。如:RouteAttribute。
预设路由的顺序如下:
public void Configure(IApplicationBuilder app)
{
// Matches request to an endpoint.
app.UseRouting();
// Endpoint aware middleware.
// Middleware can use metadata from the matched endpoint.
app.UseAuthorization();
// Execute the matched endpoint.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
属性路由使用一组属性将操作直接映射到路由模板。
public class HomeController : Controller
{
[Route("")]
[Route("Home")]
[Route("Home/Index")]
public IActionResult Index()
{
return View();
}
[Route("Home/About")]
public IActionResult About()
{
return View();
}
[Route("Home/Contact")]
public IActionResult Contact()
{
return View();
}
}
参考引用: