文档
-
第 4 部分,将模型添加到 ASP.NET Core MVC 应用
ASP.NET Core MVC 教程系列的第 4 部分。
-
第 3 部分,将视图添加到 ASP.NET Core MVC 应用
ASP.NET Core MVC 教程系列第 3 部分。
-
了解如何开始使用 ASP.NET Core MVC。
备注
此版本不是本文的最新版本。 对于当前版本,请参阅本文的 .NET 9 版本。
警告
此版本的 ASP.NET Core 不再受支持。 有关详细信息,请参阅 .NET 和 .NET Core 支持策略。 对于当前版本,请参阅本文的 .NET 9 版本。
模型-视图-控制器 (MVC) 体系结构模式将应用分成 3 个主要组件:模型 (M)、视图 (V) 和控制器 (C) 。 MVC 模式有助于创建比传统单片应用更易于测试和更新的应用。
基于 MVC 的应用包含:
Movie
模型将从数据库中检索电影数据,并将其提供给视图或对其进行更新。 更新后的数据将写入到数据库。在 MVC 应用中,视图仅显示信息。 控制器处理用户输入和交互并对其进行响应。 例如,控制器处理 URL 段和查询字符串值,并将这些值传递给模型。 该模型可使用这些值查询数据库。 例如:
https://localhost:5001/Home/Privacy
:指定 Home
控制器和 Privacy
操作。https://localhost:5001/Movies/Edit/5
:是使用 Movies
控制器和 Edit
操作编辑 ID=5 的电影的请求,本教程稍后将对此进行详细介绍。本教程的后续部分中将介绍路由数据。
MVC 体系结构模式将应用分成 3 组主要组件:模型、视图和控制器。 此模式有助于实现关注点分离:UI 逻辑位于视图中。 输入逻辑位于控制器中。 业务逻辑位于模型中。 这种隔离有助于控制构建应用时的复杂程度,因为它可用于一次处理一个实现特性,而不影响其他特性的代码。 例如,处理视图代码时不必依赖业务逻辑代码。
本教程系列介绍并演示了这些概念,同时生成一个电影应用。 MVC 项目包含“控制器”和“视图”文件夹 。
在“解决方案资源管理器”中,右键单击“控制器”>“添加”>“控制器”。
在“添加新基架项”对话框中,选择“MVC 控制器 - 空”>“添加”。
在“添加新项 - MvcMovie”对话框中,输入 ,然后选择“添加”。
将 Controllers/HelloWorldController.cs
的内容替换为以下代码:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers;
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
控制器中的每个 public
方法均可作为 HTTP 终结点调用。 上述示例中,两种方法均返回一个字符串。 请注意每个方法前面的注释。
一个 HTTP 终结点:
https://localhost:5001/HelloWorld
。HTTPS
。localhost:5001
。HelloWorld
。第一条注释指出这是一个 HTTP GET 方法,它通过向基 URL 追加 /HelloWorld/
进行调用。
第二条注释指定一个 HTTP GET 方法,它通过向 URL 追加 /HelloWorld/Welcome/
进行调用。 本教程稍后将使用基架引擎生成 HTTP POST
方法,用于更新数据。
按 Ctrl +F5,在没有调试器的情况下运行应用。
将 /HelloWorld
追加到地址栏中的路径。 Index
方法返回一个字符串。
MVC 根据入站 URL 调用控制器类以及其中的操作方法。 MVC 所用的默认 URL 路由逻辑使用如下格式来确定调用的代码:
/[Controller]/[ActionName]/[Parameters]
路由格式是在 Program.cs
文件中设置的。
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
如果浏览到应用且不提供任何 URL 段,它将默认为上面突出显示的模板行中指定的“Home”控制器和“Index”方法。 在前面的 URL 段中:
localhost:5001/HelloWorld
映射到 HelloWorld 控制器类。localhost:5001/HelloWorld/Index
触发 Index
类的 HelloWorldController
方法来运行。 请注意,你只需浏览到 localhost:5001/HelloWorld
,Index
方法就会被默认调用。 Index
是默认方法,如果未显式指定方法名称,则将在控制器上调用它。id
) 针对的是路由数据。 本教程的后续部分中将介绍路由数据。浏览到 https://localhost:{PORT}/HelloWorld/Welcome
。 将 {PORT}
替换为端口号。
Welcome
方法将运行并返回字符串 This is the Welcome action method...
。 对于此 URL,使用 HelloWorld
作为控制器,Welcome
作为动作方法。 目前尚未使用 URL 的 [Parameters]
部分。
修改代码,将一些参数信息从 URL 传递到控制器。 例如 /HelloWorld/Welcome?name=Rick&numtimes=4
。
更改 Welcome
方法以包括以下代码中显示的两个参数:
// GET: /HelloWorld/Welcome/
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}
前面的代码:
numTimes
参数传递值时,指示该参数默认为 1。HtmlEncoder.Default.Encode
防止恶意输入(例如通过 JavaScript)损害应用。$"Hello {name}, NumTimes is: {numTimes}"
中使用 插值字符串 。运行应用并浏览到 https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4
。 将 {PORT}
替换为端口号。
在 URL 中对 name
和 numtimes
使用其他值。 MVC 模型绑定系统可将命名参数从查询字符串自动映射到方法中的参数。 有关详细信息,请参阅模型绑定。
在上图中:
Parameters
URL 段。name
和 numTimes
参数是在查询字符串中传递的。?
(问号)为分隔符,后接查询字符串。&
字符将字段/值对分隔开。将 Welcome
方法替换为以下代码:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
运行应用并输入以下 URL:https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
在上述 URL 中:
id
相匹配。Welcome
方法包含 id
方法中匹配 URL 模板的参数 MapControllerRoute
。?
启动查询字符串。app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
在上面的示例中:
Program.cs
中定义的路由参数id
匹配。Welcome
方法包含 id
方法中匹配 URL 模板的参数 MapControllerRoute
。?
(id?
中)表示 id
参数可选。模型-视图-控制器 (MVC) 体系结构模式将应用分成 3 个主要组件:模型 (M)、视图 (V) 和控制器 (C) 。 MVC 模式有助于创建比传统单片应用更易于测试和更新的应用。
基于 MVC 的应用包含:
Movie
模型将从数据库中检索电影数据,并将其提供给视图或对其进行更新。 更新后的数据将写入到数据库。在 MVC 应用中,视图仅显示信息。 控制器处理用户输入和交互并对其进行响应。 例如,控制器处理 URL 段和查询字符串值,并将这些值传递给模型。 该模型可使用这些值查询数据库。 例如:
https://localhost:5001/Home/Privacy
:指定 Home
控制器和 Privacy
操作。https://localhost:5001/Movies/Edit/5
:是使用 Movies
控制器和 Edit
操作编辑 ID=5 的电影的请求,本教程稍后将对此进行详细介绍。本教程的后续部分中将介绍路由数据。
MVC 体系结构模式将应用分成 3 组主要组件:模型、视图和控制器。 此模式有助于实现关注点分离:UI 逻辑位于视图中。 输入逻辑位于控制器中。 业务逻辑位于模型中。 这种隔离有助于控制构建应用时的复杂程度,因为它可用于一次处理一个实现特性,而不影响其他特性的代码。 例如,处理视图代码时不必依赖业务逻辑代码。
本教程系列介绍并演示了这些概念,同时生成一个电影应用。 MVC 项目包含“控制器”和“视图”文件夹 。
在解决方案资源管理器中,右键单击控制器> 添加> 控制器。
在“添加新基架项”对话框中,选择“MVC 控制器 - 空>添加”。
在“添加新项 - MvcMovie”对话框中,输入 ,然后选择“添加”。
将 Controllers/HelloWorldController.cs
的内容替换为以下代码:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers;
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
控制器中的每个 public
方法均可作为 HTTP 终结点调用。 上述示例中,两种方法均返回一个字符串。 请注意每个方法前面的注释。
一个 HTTP 终结点:
https://localhost:5001/HelloWorld
。HTTPS
。localhost:5001
。HelloWorld
。第一条注释指出这是一个 HTTP GET 方法,它通过向基 URL 追加 /HelloWorld/
进行调用。
第二条注释指定一个 HTTP GET 方法,它通过向 URL 追加 /HelloWorld/Welcome/
进行调用。 本教程稍后将使用基架引擎生成 HTTP POST
方法,用于更新数据。
按 Ctrl +F5,在没有调试器的情况下运行应用。
将 /HelloWorld
追加到地址栏中的路径。 Index
方法返回一个字符串。
MVC 根据入站 URL 调用控制器类以及其中的操作方法。 MVC 所用的默认 URL 路由逻辑使用如下格式来确定调用的代码:
/[Controller]/[ActionName]/[Parameters]
路由格式是在 Program.cs
文件中设置的。
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
如果浏览到应用且不提供任何 URL 段,它将默认使用上述模板行中指定的“Home”控制器和“Index”方法。 在前面的 URL 段中:
localhost:5001/HelloWorld
映射到 HelloWorld 控制器类。localhost:5001/HelloWorld/Index
触发 Index
类的 HelloWorldController
方法来运行。 请注意,只需浏览到 localhost:5001/HelloWorld
,Index
方法就会被默认调用。 Index
是默认方法,如果未显式指定方法名称,则将在控制器上调用它。id
) 针对的是路由数据。 本教程的后续部分中将介绍路由数据。浏览到 https://localhost:{PORT}/HelloWorld/Welcome
。 将 {PORT}
替换为端口号。
Welcome
方法将运行并返回字符串 This is the Welcome action method...
。 HelloWorld
是此 URL 的控制器,而 Welcome
是操作方法。 目前尚未使用 URL 的 [Parameters]
部分。
修改代码,将一些参数信息从 URL 传递到控制器。 例如 /HelloWorld/Welcome?name=Rick&numtimes=4
。
更改 Welcome
方法以包括以下代码中显示的两个参数:
// GET: /HelloWorld/Welcome/
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}
前面的代码:
numTimes
参数传递值时,该参数默认值为 1。HtmlEncoder.Default.Encode
防止恶意输入(例如通过 JavaScript)损害应用。$"Hello {name}, NumTimes is: {numTimes}"
中。运行应用并浏览到 https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4
。 将 {PORT}
替换为端口号。
在 URL 中对 name
和 numtimes
使用其他值。 MVC 模型绑定系统可将命名参数从查询字符串自动映射到方法中的参数。 有关详细信息,请参阅模型绑定。
在上图中:
Parameters
URL 段。name
和 numTimes
参数是在查询字符串中传递的。?
(问号)为分隔符,后接查询字符串。&
字符将字段/值对分隔开。将 Welcome
方法替换为以下代码:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
运行应用并输入以下 URL:https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
在上述 URL 中:
id
相匹配。Welcome
方法包含 id
方法中匹配 URL 模板的参数 MapControllerRoute
。?
启动查询字符串。app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
在上面的示例中:
id
相匹配。Welcome
方法包含 id
方法中匹配 URL 模板的参数 MapControllerRoute
。?
(id?
中)表示 id
参数可选。模型-视图-控制器 (MVC) 体系结构模式将应用分成 3 个主要组件:模型 (M)、视图 (V) 和控制器 (C) 。 MVC 模式有助于创建比传统单片应用更易于测试和更新的应用。
基于 MVC 的应用包含:
Movie
模型将从数据库中检索电影数据,并将其提供给视图或对其进行更新。 更新后的数据将写入到数据库。在 MVC 应用中,视图仅显示信息。 控制器处理用户输入和交互并对其进行响应。 例如,控制器处理 URL 段和查询字符串值,并将这些值传递给模型。 该模型可使用这些值查询数据库。 例如:
https://localhost:5001/Home/Privacy
:指定 Home
控制器和 Privacy
操作。https://localhost:5001/Movies/Edit/5
:是使用 Movies
控制器和 Edit
操作编辑 ID=5 的电影的请求,本教程稍后将对此进行详细介绍。本教程的后续部分中将介绍路由数据。
MVC 体系结构模式将应用分成 3 组主要组件:模型、视图和控制器。 此模式有助于实现关注点分离:UI 逻辑位于视图中。 输入逻辑位于控制器中。 业务逻辑位于模型中。 这种隔离有助于控制构建应用时的复杂程度,因为它可用于一次处理一个实现特性,而不影响其他特性的代码。 例如,处理视图代码时不必依赖业务逻辑代码。
本教程系列介绍并演示了这些概念,同时生成一个电影应用。 MVC 项目包含“控制器”和“视图”文件夹 。
在解决方案资源管理器中,右键单击控制器,>>。
在“添加新基架项”对话框中,选择“MVC 控制器 - 空”>“添加”。
在“添加新项 - MvcMovie”对话框中,输入 ,然后选择“添加”。
将 Controllers/HelloWorldController.cs
的内容替换为以下代码:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers;
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
控制器中的每个 public
方法均可作为 HTTP 终结点调用。 上述示例中,两种方法均返回一个字符串。 请注意每个方法前面的注释。
一个 HTTP 终结点:
https://localhost:5001/HelloWorld
。HTTPS
。localhost:5001
。HelloWorld
。第一条注释指出这是一个 HTTP GET 方法,它通过向基 URL 追加 /HelloWorld/
进行调用。
第二条注释指定一个 HTTP GET 方法,它通过向 URL 追加 /HelloWorld/Welcome/
进行调用。 本教程稍后将使用基架引擎生成 HTTP POST
方法,用于更新数据。
按 Ctrl +F5,在没有调试器的情况下运行应用。
将 /HelloWorld
追加到地址栏中的路径。 Index
方法返回一个字符串。
MVC 根据入站 URL 调用控制器类以及其中的操作方法。 MVC 所用的默认 URL 路由逻辑使用如下格式来确定调用的代码:
/[Controller]/[ActionName]/[Parameters]
路由格式是在 Program.cs
文件中设置的。
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
当访问应用程序且不提供任何 URL 段时,它将默认使用上面模板行中突出显示的“Home”控制器和“Index”方法。 在前面的 URL 段中:
localhost:5001/HelloWorld
映射到 HelloWorld 控制器类。localhost:5001/HelloWorld/Index
触发 Index
类的 HelloWorldController
方法来运行。 请注意,您只需浏览到 localhost:5001/HelloWorld
,Index
方法就会被默认调用。 Index
是默认方法,如果未显式指定方法名称,则将在控制器上调用它。id
) 针对的是路由数据。 本教程的后续部分中将介绍路由数据。浏览到 https://localhost:{PORT}/HelloWorld/Welcome
。 将 {PORT}
替换为端口号。
Welcome
方法将运行并返回字符串 This is the Welcome action method...
。 对于此 URL,采用 HelloWorld
控制器和 Welcome
操作方法。 你还没有使用 URL 的 [Parameters]
部分。
修改代码,将一些参数信息从 URL 传递到控制器。 例如 /HelloWorld/Welcome?name=Rick&numtimes=4
。
更改 Welcome
方法以包括以下代码中显示的两个参数:
// GET: /HelloWorld/Welcome/
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}
前面的代码:
numTimes
参数传递值时该参数默认为 1。HtmlEncoder.Default.Encode
防止恶意输入(例如通过 JavaScript)损害应用。$"Hello {name}, NumTimes is: {numTimes}"
中使用内插字符串。运行应用并浏览到 https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4
。 将 {PORT}
替换为端口号。
在 URL 中对 name
和 numtimes
使用其他值。 MVC 模型绑定系统可将命名参数从查询字符串自动映射到方法中的参数。 有关详细信息,请参阅模型绑定。
在上图中:
Parameters
URL 段。name
和 numTimes
参数是在 查询字符串 中传递的。?
(问号)为分隔符,后接查询字符串。&
字符将字段/值对分隔开。将 Welcome
方法替换为以下代码:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
运行应用并输入以下 URL:https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
在上述 URL 中:
id
相匹配。Welcome
方法包含 id
方法中匹配 URL 模板的参数 MapControllerRoute
。?
启动查询字符串。app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
在上面的示例中:
id
相匹配。Welcome
方法包含 id
方法中匹配 URL 模板的参数 MapControllerRoute
。?
(id?
中)表示 id
参数可选。模型-视图-控制器 (MVC) 体系结构模式将应用分成 3 个主要组件:模型 (M)、视图 (V) 和控制器 (C) 。 MVC 模式有助于创建比传统单片应用更易于测试和更新的应用。
基于 MVC 的应用包含:
Movie
模型将从数据库中检索电影数据,并将其提供给视图或对其进行更新。 更新后的数据将写入到数据库。在 MVC 应用中,视图仅显示信息。 控制器处理用户输入和交互并对其进行响应。 例如,控制器处理 URL 段和查询字符串值,并将这些值传递给模型。 该模型可使用这些值查询数据库。 例如:
https://localhost:5001/Home/Privacy
:指定 Home
控制器和 Privacy
操作。https://localhost:5001/Movies/Edit/5
:是使用 Movies
控制器和 Edit
操作编辑 ID=5 的电影的请求,本教程稍后将对此进行详细介绍。本教程的后续部分中将介绍路由数据。
MVC 体系结构模式将应用分成 3 组主要组件:模型、视图和控制器。 此模式有助于实现关注点分离:UI 逻辑位于视图中。 输入逻辑位于控制器中。 业务逻辑位于模型中。 这种隔离有助于控制构建应用时的复杂程度,因为它可用于一次处理一个实现特性,而不影响其他特性的代码。 例如,处理视图代码时不必依赖业务逻辑代码。
本教程系列介绍并演示了这些概念,同时生成一个电影应用。 MVC 项目包含“控制器”和“视图”文件夹 。
在解决方案资源管理器中,右键单击控制器>添加>控制器。
在“添加新基架项”对话框中,选择“MVC 控制器 - 空”>,然后点击“添加”。
在“添加新项 - MvcMovie”对话框中,输入 ,然后选择“添加”。
将 Controllers/HelloWorldController.cs
的内容替换为以下代码:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}
控制器中的每个 public
方法均可作为 HTTP 终结点调用。 上述示例中,两种方法均返回一个字符串。 请注意每个方法前面的注释。
一个 HTTP 终结点:
https://localhost:5001/HelloWorld
。HTTPS
。localhost:5001
。HelloWorld
。第一条注释指出这是一个 HTTP GET 方法,它通过向基 URL 追加 /HelloWorld/
进行调用。
第二条注释指定一个 HTTP GET 方法,它通过向 URL 追加 /HelloWorld/Welcome/
进行调用。 本教程稍后将使用基架引擎生成 HTTP POST
方法,用于更新数据。
在不使用调试程序的情况下运行应用。
将“HelloWorld”追加到地址栏中的路径。 Index
方法返回一个字符串。
MVC 根据入站 URL 调用控制器类以及其中的操作方法。 MVC 所用的默认 URL 路由逻辑使用如下格式来确定调用的代码:
/[Controller]/[ActionName]/[Parameters]
路由格式是在 Program.cs
文件中设置的。
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
浏览到应用程序时,如果未提供任何 URL 段,它会默认使用上面突出显示的模板行中指定的“Home”控制器和“Index”方法。 在前面的 URL 段中:
localhost:5001/HelloWorld
映射到 HelloWorld 控制器类。localhost:5001/HelloWorld/Index
触发 Index
类的 HelloWorldController
方法来运行。 请注意,只需浏览到 localhost:5001/HelloWorld
就会自动调用 Index
方法。 Index
是默认方法,如果未显式指定方法名称,则将在控制器上调用它。id
) 针对的是路由数据。 本教程的后续部分中将介绍路由数据。浏览到 https://localhost:{PORT}/HelloWorld/Welcome
。 将 {PORT}
替换为端口号。
Welcome
方法将运行并返回字符串 This is the Welcome action method...
。 对于此 URL,HelloWorld
是控制器,Welcome
是操作方法。 目前尚未使用 URL 的[Parameters]
部分。
修改代码,将一些参数信息从 URL 传递到控制器。 例如 /HelloWorld/Welcome?name=Rick&numtimes=4
。
更改 Welcome
方法以包括以下代码中显示的两个参数:
// GET: /HelloWorld/Welcome/
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}
前面的代码:
numTimes
参数传递值,该参数的默认值为 1。HtmlEncoder.Default.Encode
防止恶意输入(例如通过 JavaScript)损害应用。$"Hello {name}, NumTimes is: {numTimes}"
中。运行应用并浏览到 https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4
。 将 {PORT}
替换为端口号。
在 URL 中对 name
和 numtimes
使用其他值。 MVC 模型绑定系统可将命名参数从查询字符串自动映射到方法中的参数。 有关详细信息,请参阅模型绑定。
在上图中:
Parameters
URL 段。name
和 numTimes
参数是在 查询字符串 中传递的。?
(问号)为分隔符,后接查询字符串。&
字符将字段/值对分隔开。将 Welcome
方法替换为以下代码:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
运行应用并输入以下 URL:https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
在上述 URL 中:
id
相匹配。Welcome
方法包含 id
方法中匹配 URL 模板的参数 MapControllerRoute
。?
启动查询字符串。app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
在上面的示例中:
id
相匹配。Welcome
方法包含 id
方法中匹配 URL 模板的参数 MapControllerRoute
。?
(id?
中)表示 id
参数可选。模型-视图-控制器 (MVC) 体系结构模式将应用分成 3 个主要组件:模型 (M)、视图 (V) 和控制器 (C) 。 MVC 模式有助于创建比传统单片应用更易于测试和更新的应用。
基于 MVC 的应用包含:
Movie
模型将从数据库中检索电影数据,并将其提供给视图或对其进行更新。 更新后的数据将写入到数据库。在 MVC 应用中,视图仅显示信息。 控制器处理用户输入和交互并对其进行响应。 例如,控制器处理 URL 段和查询字符串值,并将这些值传递给模型。 该模型可使用这些值查询数据库。 例如:
https://localhost:5001/Home/Privacy
:指定 Home
控制器和 Privacy
操作。https://localhost:5001/Movies/Edit/5
:是使用 Movies
控制器和 Edit
操作编辑 ID=5 的电影的请求,本教程稍后将对此进行详细介绍。本教程的后续部分中将介绍路由数据。
MVC 体系结构模式将应用分成 3 组主要组件:模型、视图和控制器。 此模式有助于实现关注点分离:UI 逻辑位于视图中。 输入逻辑位于控制器中。 业务逻辑位于模型中。 这种隔离有助于控制构建应用时的复杂程度,因为它可用于一次处理一个实现特性,而不影响其他特性的代码。 例如,处理视图代码时不必依赖业务逻辑代码。
本教程系列介绍并演示了这些概念,同时生成一个电影应用。 MVC 项目包含“控制器”和“视图”文件夹 。
在解决方案资源管理器中,右键单击控制器> 添加> 控制器。
在“添加基架”对话框中,选择“MVC 控制器 - 空” 。
在“添加新项 - MvcMovie”对话框中,输入 ,然后选择“添加”。
将 Controllers/HelloWorldController.cs
的内容替换为以下内容:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}
控制器中的每个 public
方法均可作为 HTTP 终结点调用。 上述示例中,两种方法均返回一个字符串。 请注意每个方法前面的注释。
一个 HTTP 终结点:
https://localhost:5001/HelloWorld
。HTTPS
。localhost:5001
。HelloWorld
。第一条注释指出这是一个 HTTP GET 方法,它通过向基 URL 追加 /HelloWorld/
进行调用。
第二条注释指定一个 HTTP GET 方法,它通过向 URL 追加 /HelloWorld/Welcome/
进行调用。 本教程稍后将使用基架引擎生成 HTTP POST
方法,用于更新数据。
在不使用调试程序的情况下运行应用。
将“HelloWorld”追加到地址栏中的路径。 Index
方法返回一个字符串。
MVC 根据入站 URL 调用控制器类以及其中的操作方法。 MVC 所用的默认 URL 路由逻辑使用如下格式来确定调用的代码:
/[Controller]/[ActionName]/[Parameters]
在 Configure
文件的 Startup.cs
方法中设置路由格式。
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
如果浏览到应用且不提供任何 URL 段,它将默认为上面突出显示的模板行中指定的“Home”控制器和“Index”方法。 在前面的 URL 段中:
localhost:5001/HelloWorld
映射到 HelloWorld 控制器类。localhost:5001/HelloWorld/Index
触发 Index
类的 HelloWorldController
方法来运行。 请注意,只需浏览到 localhost:5001/HelloWorld
,Index
方法就会默认调用。 Index
是默认方法,如果未显式指定方法名称,则将在控制器上调用它。id
) 针对的是路由数据。 本教程的后续部分中将介绍路由数据。浏览到 https://localhost:{PORT}/HelloWorld/Welcome
。 将 {PORT}
替换为端口号。
Welcome
方法将运行并返回字符串 This is the Welcome action method...
。 对于此 URL,控制器是 HelloWorld
,动作方法是 Welcome
。 目前尚未使用 URL 的 [Parameters]
部分。
修改代码,将一些参数信息从 URL 传递到控制器。 例如 /HelloWorld/Welcome?name=Rick&numtimes=4
。
更改 Welcome
方法以包括以下代码中显示的两个参数:
// GET: /HelloWorld/Welcome/
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}
前面的代码:
numTimes
参数传递值,C# 的可选参数功能会将其默认值设为 1。HtmlEncoder.Default.Encode
防止恶意输入(例如通过 JavaScript)损害应用。$"Hello {name}, NumTimes is: {numTimes}"
中。运行应用并浏览到 https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4
。 将 {PORT}
替换为端口号。
在 URL 中对 name
和 numtimes
使用其他值。 MVC 模型绑定系统可将命名参数从查询字符串自动映射到方法中的参数。 有关详细信息,请参阅模型绑定。
在上图中:
Parameters
URL 段。name
和 numTimes
参数在 查询字符串 中传递。?
(问号)为分隔符,后接查询字符串。&
字符将字段/值对分隔开。将 Welcome
方法替换为以下代码:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
运行应用并输入以下 URL:https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
在上述 URL 中:
id
相匹配。Welcome
方法包含 id
方法中匹配 URL 模板的参数 MapControllerRoute
。?
启动查询字符串。app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
在上面的示例中:
id
相匹配。Welcome
方法包含 id
方法中匹配 URL 模板的参数 MapControllerRoute
。?
(id?
中)表示 id
参数可选。文档
第 4 部分,将模型添加到 ASP.NET Core MVC 应用
ASP.NET Core MVC 教程系列的第 4 部分。
第 3 部分,将视图添加到 ASP.NET Core MVC 应用
ASP.NET Core MVC 教程系列第 3 部分。
了解如何开始使用 ASP.NET Core MVC。
培训
模块
使用 ASP.NET Core 控制器创建 Web API - Training
使用支持创建、读取、更新以及删除 (CRUD) 操作的 ASP.NET Core 控制器创建 RESTful 服务。