.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

  第一条注释指出这是一个 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

posted @ 2022-06-22 17:14  大师兄被妖怪抓走了  阅读(256)  评论(0)    收藏  举报