.NET Core - MVC 应用添加控制器
MVC:模型-视图-控制器
将应用分成三个主要的组件 :
M : (模型)业务逻辑位于模型中。表示应用数据的类,模型类使用验证逻辑来对该数据强制实施业务规则
通常,模型对象检索模型状态并将其存储在数据库中。
实操中的 Movie 模型将从数据库中检索电影数据,并将其提供给视图或对其进行更新。 更新后的数据将写入到数据库。
V :(视图)UI 逻辑位于视图中。 显示应用用户界面 (UI) 的组件.通常会显示模型数据.
C :(控制器) 输入逻辑位于控制器中。
①.处理浏览器请求
②.检索模型数据
③.调用返回响应的视图模板
MVC有助于创建比传统单片应用更易于测试和更新的应用。
在 MVC 应用中,视图仅显示信息。 控制器处理用户输入和交互并对其进行响应。
例 :控制器处理 URL 段和查询字符串值,并将这些值传递给模型。 该模型可使用这些值查询数据库。
例:
-
-
https://localhost:5001/Home/Privacy:指定Home控制器和Privacy操作。https://localhost:5001/Movies/Edit/5:是使用Movies控制器和Edit操作编辑 ID=5 的电影的请求。
-
2. 添加控制器
右键"Controllers"文件夹 => 添加 => 控制器(T)... => MVC 控制器 - 空 => 添加 => 名称 :HelloWorldController.cs => 添加
将新生成的 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 终结点:
-
- 是 Web 应用程序中可定向的 URL,例 :
https://localhost:5001/HelloWorld。 - 结合以下内容:
- 所用的协议:
HTTPS。 - Web 服务器的网络位置,包括 TCP 端口:
localhost:5001。 - 目标 URI:
HelloWorld。
- 所用的协议:
- 是 Web 应用程序中可定向的 URL,例 :
第一条注释指出这是一个 HTTP GET 方法,它通过向基 URL 追加 /HelloWorld/ 进行调用。
第二条注释指定一个 HTTP GET 方法,它通过向 URL 追加 /HelloWorld/Welcome/ 进行调用。
在不使用调试程序的情况下运行应用(CTRL+F5)
向地址栏中追加"HelloWorld"访问
例 : 访问地址 https://localhost:5001/HelloWorld
返回的是 :This is my default action...(内容是控制器 HelloWorldController 中Index方法的返回字符串)
例 :访问地址 https://localhost:5001/HelloWorld/Welcome
返回的是 :This is the Welcome action method...(内容是控制器 HelloWorldController 中Welcome方法的返回字符串)
MVC 根据入站 URL 调用控制器类以及其中的操作方法。
MVC 所用的默认 URL路由逻辑 使用如下格式来确定调用的代码:
/[Controller]/[ActionName]/[Parameters]
[Controller] :决定要运行的控制器类。
例 :localhost:5001/HelloWorld 中 HelloWorld 映射到 HelloWorld的控制器类 HelloWorldController。
[ActionName] : 决定类上的操作方法。
例 :localhost:5001/HelloWorld/Index 中 Index 触发HelloWorldController类中的 Index方法来运行
注意 :如 localhost:5001/HelloWorld没有指定方法名称,默认调用Index方法。
[Parameters] :针对的是路由数据。根据教材 后续介绍路由数据。
路由格式是在Program.cs文件中设置的
例 :
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
如果浏览到应用且不提供任何 URL 段,它将默认为上面突出显示的模板行中指定的“Home”控制器和“Index”方法。
修改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}");
}
代码注解:
①. 使用 C# 可选参数功能指示,未为 numTimes 参数传递值时该参数默认为 1。
②. 使用 HtmlEncoder.Default.Encode 防止恶意输入(例如通过 JavaScript)损害应用。
③. 在 $"Hello {name}, NumTimes is: {numTimes}" 中使用内插字符串。
运行应用,访问地址 : https://localhost:5001/HelloWorld/Welcome?name=Rick&numtimes=4
?:为分隔符,后接查询字符串。
& :字符将字段/值对分隔开。
页面显示内容 :Hello Rick, NumTimes is: 4
在 URL 中对 name 和 numtimes 使用其他值。 MVC 模型绑定系统可将命名参数从查询字符串自动映射到方法中的参数。
修改Welcome方法为:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
运行应用访问地址 :https://localhost:5001/HelloWorld/Welcome/3?name=Rick
/3 与路由参数id相匹配。
Welcome 方法包含 program.cs 中配置的 MapControllerRoute 方法中匹配 URL 模板的参数 id。
尾随的 ? 启动查询字符串。
页面显示内容 :Hello Rick, ID: 3

浙公网安备 33010602011771号