第二章指南(4.2)添加 Controller
原文: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的配置(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跨平台或扫描二维码关注
赞赏
人赞赏
第二章指南(4.2)添加 Controller相关推荐
- 第二章 指南(4.3)添加 View
原文:Adding a view 作者:Rick Anderson 翻译:魏美娟(初见) 校对:赵亮(悲梦).高嵩(Jack).娄宇(Lyrics).许登洋(Seay).姚阿勇(Dr.Yao) 本节将 ...
- ASP.NET Core 中文文档 第二章 指南(4.4)添加 Model
原文:Adding a model 作者:Rick Anderson 翻译:娄宇(Lyrics) 校对:许登洋(Seay).孟帅洋(书缘).姚阿勇(Mr.Yao).夏申斌 在这一节里,你将添加一些类来 ...
- ASP.NET Core 中文文档 第二章 指南(4.3)添加 View
原文:Adding a view 作者:Rick Anderson 翻译:魏美娟(初见) 校对:赵亮(悲梦).高嵩(Jack).娄宇(Lyrics).许登洋(Seay).姚阿勇(Dr.Yao) 本节将 ...
- ASP.NET Core 中文文档 第二章 指南(4.5)使用 SQL Server LocalDB
原文:Working with SQL Server LocalDB 作者:Rick Anderson 翻译: 魏美娟(初见) 校对: 孟帅洋(书缘).张硕(Apple).许登洋(Seay) Appl ...
- ASP.NET Core 中文文档 第二章 指南(4.10)检查自动生成的Detail方法和Delete方法
原文 Examining the Details and Delete methods 作者 Rick Anderson 翻译 谢炀(Kiler) 校对 许登洋(Seay).姚阿勇(Mr.Yao) 打 ...
- 『基础教学第二章』MMD基本功能详解-Kinsama
大家好,本篇教学会对MMD中基本而重要的功能做详细介绍 使用模型:YYB式ENE 第一部分:操作界面 图看不清没关系,我会做详细解释 我们先熟悉一下操作界面 ...
- 使用ThreeJs从零开始构建3D智能仓库——第二章(创建地面与门窗)
使用ThreeJs从零开始构建3D智能仓库--第二章 最新进展 如何添加墙壁.窗户.门 添加三面实心的墙壁 创建挖去门窗的墙 安装门及窗户 完整的代码 结束语 最新进展 最近这两天因为项目上比较空闲了 ...
- ZeroMQ 中文指南 第二章 ZeroMQ进阶【转载】
此文章转载自GitHub : https://github.com/anjuke/zguide-cn 作者信息如下. ZMQ 指南 作者: Pieter Hintjens ph@imatix.com, ...
- 《Hadoop权威指南》第二章 关于MapReduce
<Hadoop权威指南>第二章 关于MapReduce 目录 使用Hadoop来数据分析 横向扩展 注:<Hadoop权威指南>重点学习摘要笔记 1. 使用Hadoop来数据分 ...
最新文章
- 计算机网络核心知识(下)
- JZOJ 5629. 【NOI2018模拟4.4】Map
- qt 在点击菜单下的动作之后获取该菜单的名称
- Linux学习日记——源码编译Apache
- C++中关于隐藏的理解
- jeecg 查看 页面 父子表 横向滚动条效果 官方被禁用
- deepin安装bochs2.6.2_深度Deepin系统中wine4.0.1源编辑安装
- NBA球星杜兰特之前投资Coinbse目前已获利达61.5倍
- plsql的汉化问题
- Unity官方支持中文版啦!!!附教程——无需破解!
- vmware workstation 12 密钥
- gradle教程java_Gradle教程系列 ——Gradle基本语法
- Jetpack 新成员 AndroidX App Startup 实践以及原理分析
- css里面li标签怎么加图片_css怎么设置li标签的样式?
- 如何烧写Bubblegum-96 board
- oracle期末考试参考答案
- 【每日一练】小米搜索框
- 申报绿色工厂对企业意义
- 接口全周期的生产力利器Apifox
- cad画正弦曲线lisp_Autolisp曲线绘制