简介
包含 01 到 03 章的笔记
ASP.NET Core 的结构:

1. 理解框架
- 应用程序框架
MVC框架. 经典的框架, 受到SPA的影响较大. 一般在处理复杂应用时还是会用到.Razor Pages. 页面模型, 开发成本比起MVC更小, 一般作为小规模应用开发. 可以与MVC合用.Blazor. 包含Blazor Server和Blazor WebAssembly, 让C#可以在浏览器中运行.
- 实用程序框架
Identity. 实用微软的认证授权框架.EntityFramework
- 平台. 本书没有引入的是
SignalR和gRPC.
2. 其他
然后介绍了本书的结构与各个部分的内容. 并介绍了与作者联系的方式, 代码, 勘误等内容.
3. 入门
选择代码编辑器. 然后是安装步骤解释与截图.
安装 SDK. 查看 SDK
dotnet --list-sdks
安装 VSCode, 注意添加到环境变量, 以及右键菜单中.
安装数据库 SQLServer LocalDB.
个人还是比较喜欢使用
Express版本, 或者Developer版本. 在Docker上运行, 让在 Mac 上开发很方便.
4. 创建 ASP.NET Core 项目
这个基本操作复核作者的开发模式. 基本上可以理解为在 VSCode + 命令行的开发模式下, 尽可能完成 VS 的功能
创建项目:
dotnet new globaljson --sdk-version <version> --output <proj_dir>
dotnet new mvc --no-https --output <proj_dir> --framework <netversion>
作者不喜欢使用模板, 会从最小模板开始写代码. 这点大赞.
关于
sdk的版本, 可以使用dotnet --list-sdks来查看.
framework的版本可以是:netcoreapp3.1,net5.0,net6.0,net7.0,net8.0等.
然后分别演示了在 VS 和 VSCode 中打开项目, 并运行项目 (VSCode 会安装插件, 并生成调试用文件).
运行使用命令
dotnet run
补充说明
# 监视运行 (可以省略 run 命令, 但是如果需要其他参数, 或环境变量, 则需要添加 run 命令) dotnet watch run例如使用指定环境变量, 运行监视命令
dotnet watch run -- --environment sit环境的值, 在运行时直接决定 加载
appsettings.环境.json的文件. 可以利用该功能加载不同环境.
4.1 理解端点 Endpoint
传入的请求由端点来处理. MVC 模式下, 请求进入后, 由控制器下的某个动作方法来处理.
约定:
- 控制器放在
Controllers文件夹下. - 控制器是一个类,
MVC的控制器继承自Controller(Microsoft.AspNetCore.Mvc.Controller). - 动作方法是控制器中的方法. 动作方法返回
IActionResult, 具体返回一个View调用. 这里作者修改返回一个字符串.
运行后访问即可看到对应字符串.
补充, 作者使用运行但不调试 (
Ctrl + F5)
4.2 理解路由
由于路由定义中将 Home 控制器, 和 Index 动作方法配置为默认, 因此下面的路由均表示 HomeController 下的 Index 方法:
//Home/Home/Index
4.3 理解 HTML 渲染
原则上, 路由将请求重定向到 动作方法后, 如果动作方法要返回页面, 直接返回页面的 HTML, 然后配合 Content-Type, 浏览器就会进行渲染显示.
因此在 MVC 中使用了视图引擎. 视图引擎是一个执行模型, 将视图和数据合并后转换为 HTML 来返回.
约定:
- 动作方法调用
View()方法, 并将其作为IActionResult来返回, 该方法就是在生成HTML+ 对应的响应头. - 默认约定
View()会去寻找与控制器/动作方法同名的视图文件. 约定视图文件放在Views目录下. 并且目录结构与控制器, 和动作方法一一对应. 即Home控制器下的Index动作方法, 对应Views目录下的Home文件夹下的Index.cshtml视图文件. View()常用重载有几个View()使用默认视图, 没有为视图传入模型参数.View("视图名")指定视图, 没有传入模型参数.View(模型对象)使用默认视图, 传入模型参数.View("视图名", 模型对象)指定视图, 并传入模型参数.
- 一个视图文件背后对应一个视图模型. 这决定了视图文件的结构.
@model视图模型的类型@ {}代码块, 用来配置布局- 正常的 HTML 片段
- 使用
@Model引用视图模型对象
5. 第一个 ASP.NET Core 应用
通过一个 DEMO 来介绍 MVC 的基本结构与用法. 这里不解释原理, 仅仅是操作步骤.
5.1 场景设置
创建一个约定参会的邀请应用:
- 需要显示聚会信息页面
- 可用于 RSVP 的表单
- 确认 RSVP 表单, 返回一个感谢页面
- 显示聚会数据汇总页面
5.2 创建项目
命令行创建项目
dotnet new globaljson --sdk-version 3.1.101 --output PartyInvites
dotnet new mvc --no-https --output PartyInvites --framework netcoreapp3.1
打开代码, 编辑 HomeController, 移除所有控制器类中的内容, 仅保留一个 Index 动作方法, 并调用 View() 返回.
namespace PartyInvites.Controllers {
public class HomeController: Controller {
public IActionResult Index() {
return View();
}
}
}
修改 Views/Home/Index.cshtml 文件
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width"/>
<title>Party!</title>
</head>
<body>
<div>
<div>
We're going to have an exciting party.<br />
(To do: sell it better. Add picture or something.)
</div>
</div>
</body>
</html>
运行后即可单开展示上述 HTML 的页面.

补充
在 Pro ASP.NET Core 6/7 中创建项目多出了两个步骤, 同时添加了修改 Properities/launchSettings.json 的部分.
- 创建项目的时候
- 创建
sln解决方案配置文件 - 将项目添加到解决方案中 (这样使用
VS也可以打开项目)
- 创建
- 修改配置项目的 端口为
5000, 直接编辑Properties/launchSettings.json
使用 Pro ASP.NET Core 7 中的代码演示:
dotnet new globaljson --sdk-version 7.0.100 --output PartyInvites
dotnet new mvc --no-https --output PartyInvites --framework net7.0
dotnet new sln -o PartyInvites
dotnet sln PartyInvites add PartyInvites
dotnet sln 解决方案文件 add 需要添加的项目文件夹将后面的添加到前面.
5.3 添加数据模型
引入了一些概念, 模型, 模型域, 域对象.
本质是一个东西.
约定模型放在 Models 目录中.
- 创建
GuestResponse.cs文件. - 创建
GustResponse类, 包含属性:Name,Email,Phone,WillAttend
namespace PartyInvites.Models {
public class GustResponse {
public string Name { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public bool? WillAttend { get; set; }
}
}
注意这里的
WillAttend是可空类型, 有助于后期做数据绑定.
5.4 创建第二个操作与视图
这次创建表单, 用来录入用户的信息.
- 添加动作方法
RevpForm, 因为返回视图, 直接返回ViewResult类型. - 调用
View()并返回. - 添加
RsvpForm.cshtml视图文件.
public ViewResult RsvpForm() {
return View();
}
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>RsvpForm</title>
</head>
<body>
<div>
This is the RsvpForm.cshtml View
</div>
</body>
</html>
运行后得到:

5.5 连接操作方法
使用内置的 tag-helper, 在 Index 上添加跳转到 RsvpForm 的连接
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width"/>
<title>Party!</title>
</head>
<body>
<div>
<div>
We're going to have an exciting party.<br />
(To do: sell it better. Add picture or something.)
</div>
<a asp-action="RsvpForm">RSVP Now</a>
</div>
</body>
</html>

5.6 构建表单
主要是修改视图文件. 关键点:
- 视图模型使用
GuestResponse - 表单中使用
tag helper