第二章指南(4.2)添加 Controller

来源:互联网 发布:java中point 用法 编辑:程序博客网 时间:2024/06/11 05:02

原文:Adding a controller
翻译:娄宇(Lyrics)
校对:刘怡(AlexLEWIS)、何镇汐、夏申斌、孟帅洋(书缘)

Model-View-Controller (MVC) 架构模式将一个应用程序分离成三个主要的组件: Model、View 以及Controller 。 MVC 模式帮助你创建可测试的应用程序,比传统的单块应用程序更加容易维护和更新。基于 MVC 的应用程序包含:

  • Models:应用程序中用来表示数据的类,并使用验证逻辑来执行该数据业务规则。通常,模型(Model)对象从数据库查询和存储 Model 状态。在本教程 Movie 模型(Model)从数据库查询电影数据用来显示或更新。更新后的数据写入 SQL Server 数据库。

  • Views:视图是显示用户界面(UI)的组件。通常,UI 用于显示模型(Model)数据。

  • Controllers:一种类(Class),用于处理浏览器请求,查询模型(Model)数据,以及将指定视图模板作为响应返回给浏览器。在 MVC 应用程序中,视图(View)仅仅显示信息; 控制器(Controller)处理和响应用户的输入和交互。例如, 控制器(Controller)处理路由数据和查询字符串值,然后将这些值传递给模型(Model),模型(Model)可以使用这些值去查询数据库。

MVC 模式帮助你创建一个分离不同方面的应用程序(输入逻辑,业务逻辑,以及 UI 逻辑),同时这些元素之间是松耦合的。该模式指定在应用程序中的每一种逻辑应该位于何处。 UI 逻辑属于视图(View)。输入逻辑属于控制器(Controller)。业务逻辑属于模型(Model)。当你构建一个应用程序时,这样的分离帮助你管理应用程序的复杂性,因为它使你编写一个方面的代码时不会影响其他(方面)的代码。比如,你可以编写视图(View)代码而不需要依赖于业务逻辑代码。

我们会在本系列教程中涵盖所有这些概念,并告诉你如何使用它们构建一个简单的电影应用程序。下面的图片展示了 MVC 项目中的 Models 、 Views 以及 Controllers 文件夹。

  • 在 解决方案资源管理器(Solution Explorer) 中,鼠标右键点击 Controllers > 添加(Add) > 控制器(Controller)

  • 在 添加基架(Add Scaffold) 对话框中

  • 点击 MVC Controller - Empty

  • 点击 添加(Add)

  • 命名控制器(Controller)为 HelloWorldController

  • 点击 添加(Add)

用下面的代码替换 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...";        }    }}

控制器(Controller)的每个 public 方法都可作为 HTTP 端点。在上面的例子中,两个方法都返回 string,注意它们的注释:

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...";    }}

第一条注释指出这是一个通过在 URL 后添加 "/HelloWorld/" 调用的 HTTP GET 方法。第二条指出这是一个通过在 URL 后添加 "/HelloWorld/Welcome/" 调用的 HTTP GET 方法。之后的教程我们将使用基架引擎来生成 HTTP POST 方法。

使用非调试模式(Ctrl+F5)运行应用程序,并在浏览器地址栏路径后添加 "HelloWorld" (在下面的图片中,使用了 http://localhost:1234/HelloWorld ,但是你必须用你的应用程序端口替换 1234 )。 Index 方法返回一段字符串,系统将这段字符串转换为 HTML 返回给浏览器。

MVC 调用的控制器(Controller)类 (以及它们的 Action 方法) 取决于传入的 URL 。MVC 的默认路由逻辑采用类似下面规则格式来决定代码的调用:

/[Controller]/[ActionName]/[Parameters]

你可以在 Startup.cs 文件中设置路由规则。

app.UseMvc(routes =>{    routes.MapRoute(        name: "default",       
       template:
"{controller=Home}/{action=Index}/{id?}");  
//(手动高亮)});

当你运行应用程序且不提供任何 URL 段时,它将默认访问在上面模板中高亮行指定的 "Home" Controller 中的 "Index" Action 方法。

第一个 URL 段决定运行哪个控制器(Controller)。所以 localhost:xxxx/HelloWorld 映射到 HelloWorldController 类。URL 段的第二部分决定类里的 Action 方法。所以 localhost:xxxx/HelloWorld/Index 将运行 HelloWorldController 中的 Index 方法。请注意,我们只需要浏览 localhost:xxxx/HelloWorld,默认会调用 Index 方法。这是因为在没有指定方法名时, Index是默认方法。URL 段的第三部分 ( Parameters) 是路由数据。我们之后将在本教程中了解路由数据。

浏览 http://localhost:xxxx/HelloWorld/Welcome 。 Welcome 方法运行并返回 "This is the Welcome action method..." 。默认的 MVC 路由是 /[Controller]/[ActionName]/[Parameters] 。对于这个 URL , 控制器(Controller)是 HelloWorld , Action 方法是 Welcome 。我们还没有使用 URL 中的 [Parameters] 部分。

让我们稍微修改一下例子,使我们能够通过 URL 传递一些参数信息到控制器(Controller)(例如, /HelloWorld/Welcome?name=Scott&numtimes=4 )。如下所示修改 Welcome 方法使其包含两个参数。请注意,代码利用 C# 的可选参数特性指明,在没有传递参数的情况下, numTimes 参数默认为1。

public string Welcome(string name, int numTimes = 1){  
 return HtmlEncoder.Default.Encode(        "Hello " + name + ", NumTimes is: " + numTimes);}

警告
上面的代码使用 HtmlEncoder.Default.Encode 来保护应用程序免受恶意输入(即 JavaScript)。

警告
在 Visual Studio 2015 中,当你以非调试模式 (Ctl+F5) 运行,你不需要在修改代码后生成应用程序。只需要保存文件,刷新你的浏览器就可以看到改变。

运行你的应用程序并浏览:

http://localhost:xxxx/HelloWorld/Welcome?name=Rick&numtimes=4

(用你的端口替换 xxxx。) 你可以在 URL 中对 name 和 numtimes 尝试不同的值。 模型绑定系统自动将地址栏里查询字符串中有名字的参数映射到你方法中的参数。查看 :doc:/mvc/models/model-binding 获得更多的信息。

在上面的示例中, URL 段 (Parameters) 没有被使用, name 和 numTimes 参数作为 查询字符串 被传递。 上面 URL 中的 ? (问号) 是一个分隔符,后面跟查询字符串。 & 字符分割查询字符串。

用下面的代码替换 Welcome 方法:

public string Welcome(string name, int ID = 1){    return HtmlEncoder.Default.Encode(        "Hello " + name + ", ID: " + ID);}

运行应用程序然后输入 URL : http://localhost:xxx/HelloWorld/Welcome/3?name=Rick

这次第三个 URL 段匹配上路由参数 id 。 Welcome 方法包含一个与 MapRoute 内的 URL 模板相匹配的 id 参数。跟随的 ? (id?) 表示 id 参数是可选的。

app.UseMvc(routes =>{    routes.MapRoute(        name: "default",        template: "{controller=Home}/{action=Index}/{id?}");  //(手动高亮)});

在这些例子中,控制器(Controller)一直在做 MVC 中的 "VC" 部分,就是视图(View)和控制器(Controller)部分的工作。这个控制器(Controller)直接返回 HTML 。一般来说你不想让控制器(Controller) 直接返回 HTML ,因为这让编码和维护变得非常麻烦。所以,我们通常会使用一个单独的 Razor 视图模板文件来帮助生成 HTML 响应。 我们将在下一个教程中介绍这部分。

由于水平有限,错漏之处在所难免,欢迎大家批评指正,不胜感激,我们将及时修正。
dotNet Core Studying Group:436035237


相关文章:

  • ASP.NET Core 1.0 入门——了解一个空项目

  • ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)

  • .NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0简介

  • 云服务器下ASP.NET Core 1.0环境搭建(包含mono与coreclr)

  • 使用VS Code开发ASP.NET Core 应用程序

  • dotnet run是如何启动asp.net core站点的

  • ASP.NET Core提供模块化Middleware组件

  • “dotnet restore"和"dotnet run"都做了些什么?

  • 探秘 dotnet run 如何运行 .NET Core 应用程序

  • .NET Portability Analyzer 已开源

  • ASP.NET Core的配置(1):读取配置信息

  • ASP.NET Core的配置(2):配置模型详解

  • .NET Core 1.0 RC2 历险之旅

  • 使用VS Code开发 调试.NET Core 应用程序

  • 让我们Core在一起:ASP.NET Core & .NET Core

  • .NET Core VS Code 环境配置

  • 官方博客明确了 .NET Core RC2/RTM 时间表

  • .NET Core全新的配置管理[共9篇]

  • 利用记事本创建一个ASP.NET Core RC2 MVC应用

  • 微软.NET 正式劈腿成功,横跨所有平台

  • .NET Core 1.0 CentOS7 尝试

  • 解读发布:.NET Core RC2 and .NET Core SDK Preview 1

  • [.NET Core].NET Core R2安装及示例教程

  • ASP.NET Core 开发-中间件(Middleware)

  • 结合Jexus + Kestrel 部署 asp.net core 生产环境

  • 通过Jexus 部署 dotnetcore版本MusicStore 示例程序

  • ASP.NET Core 中文文档 第一章 入门

  • 用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序

  • 用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API

  • 用 Visual Studio 发布一个 Azure 云 Web 应用程序

  • ASP.NET Core MVC 与 Visual Studio 入门


原文地址:http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-2_4_2-adding-controller.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注


阅读全文
0 0
原创粉丝点击