Controllers, Actions 和 Action Results
Controllers, Actions 和 Action Results
原文:Controllers, Actions, and Action Results
作者:Steve Smith
翻译:姚阿勇(Dr.Yao)
校对:许登洋(Seay)
Action 和 action result 是开发者使用 ASP.NET MVC 构建应用程序的基础部分。
什么是 Controller
在 ASP.NET MVC 中, 控制器( Controller
)用于定义和聚合操作(Action)的一个集合。操作( 或操作方法 )是控制器中处理入站请求的一个方法。控制器提供了一种逻辑方式将相似的操作组织起来,允许一些通用的规则(如:路由,缓存和验证)得到共同的应用。 入站请求通过路由(routing)被映射到操作上。
在 ASP.NET Core MVC 中,控制器可以是任何以 “Controller” 结尾或者继承自以 “Controller” 结尾的可实例化类。控制器应当遵循 显式依赖原则 并且通过使用依赖注入在构造函数中获取他们需要的任何依赖项。
按照惯例,控制器类:
- 放在根目录下的 “Controllers” 文件夹中
- 继承自 Microsoft.AspNetCore.Mvc.Controller
这两个惯例不是强制要求。
在模型-视图-控制器模式中,控制器负责初始化请求以及实例化模型。通常来说,业务流程应当放在模型中执行。
说明
模型应该是一个简单的传统 CLR 对象(Plain Old CLR Object (POCO) ),而不是一个数据库上下文DbContext或者关系数据库类型。
控制器取得模型的执行结果(如果有),返回正确的视图以及相关的视图数据。更多请参考:Overview of ASP.NET Core MVC 和 ASP.NET Core MVC 和 Visual Studio 入门。
技巧
控制器是一个 UI级别 的抽象。它的责任在于确保入站请求的数据是有效的,然后选择应当返回哪一个视图(或者 API 的结果)。在有着良好分解的应用程序中,控制器不会直接包含数据访问或业务逻辑,而是委托给服务去处理这些任务。
Action 的定义
控制器上的任意公共方法都是一个 Action 。Action 上的参数是通过 模型绑定 来请求数据绑定并校验。
提示
带有参数的 Action 方法应该检查ModelState.IsValid属性的值是否为真 。
Action 方法应当包含将传入请求映射到业务的逻辑。业务关注通常应该表现为由控制器通过( 依赖注入(dependency injection))访问服务。Actions 然后映射业务行为的结果到应用程序的状态。
Action 可以返回任何东西,但是常常会返回一个 IActionResult (或异步方法返回的 Task<IActionResult> )实例生成响应。Action 方法负责选择“响应的类型”,Action Result 负责“响应的执行”。
控制器辅助方法
- 视图(View)
返回一个使用模型渲染 HTML 的视图。例:return View(customer); - HTTP 状态代码
返回一个 HTTP 状态代码。例:return BadRequest(); - 格式化的响应
返回Json或类似以特定方式格式化的对象。例:return Json(customer); - 内容协商的响应
除了直接返回一个对象,Action 还可以返回一个内容协商的响应(使用Ok,Created,CreatedAtRoute或CreatedAtAction)。例如:return Ok();或return CreatedAtRoute("routename",values,newobject"); - 重定向
返回一个指向其他 Action 或目标的重定向(使用Redirect,LocalRedirect,RedirectToAction或RedirectToRoute)。例如:return RedirectToAction("Complete", new {id = 123});
除了上面的方法之外,Action 还可以直接返回一个对象。在这种情况下,对象将以客户端要求的方式进行格式化。详情请参考: 格式化响应数据
横切关注点
在大多数应用中,许多 Action 会共用部分工作流。例如,大多数应用可能只对验证过的用户开放,或者要利用缓存。当你想要在 Action 方法运行之前或之后执行一些逻辑业务时,可以使用 过滤器(filter) 。利用 过滤器(filters) 处理一些横切关注点,可以防止你的 Action 变得过于臃肿。这有助于剔除 Action 中的重复代码,使得它们可以遵循 不要重复你自己(DRY)原则 。
就验证和授权而言,你可以将 Authorize 特性应用在任何一个要求授权的 Action 上。将它加在控制器上将会对该控制器里的所有的 Action 采用授权。这个特性的添加将确保每个访问此 Action 的请求都被应用了对应的过滤器。有些特性可以同时应用在控制器和 Action 上,以提供对过滤器行为更小粒度的控制。
关于 MVC 应用程序中横切关注点的其他例子:
提示
在 MVC 应用程序里,很多横切关注点都可以利用过滤器来处理。还有另一种对所有 ASP.NET Core 应用程序都有效的选择需要记住,就是自定义 中间件(middleware)。
dotNet Core Studying Group:436035237
Controllers, Actions 和 Action Results的更多相关文章
- ASP.NET Core 中文文档 第四章 MVC(4.1)Controllers, Actions 和 Action Results
原文:Controllers, Actions, and Action Results 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:许登洋(Seay) Action 和 acti ...
- Web API 2中的Action Results
[译]Action Results in Web API 2 单击此处查看原文 本文阐述了ASP.NET Web API是如何将controller action的返回值转换为HTTP respons ...
- Action Results in Web API 2
https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/action- ...
- GitHub Actions in Action
GitHub Actions in Action https://lab.github.com/githubtraining/github-actions:-hello-world https://g ...
- web api :Action Results in Web API 2
原文:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/action-results Web api 返回 ...
- 【Web API系列教程】1.2 — Web API 2中的Action Results
前言 本节的主题是ASP.NET Web API怎样将控制器动作的返回值转换成HTTP的响应消息. Web API控制器动作能够返回下列的不论什么值: 1. void 2. HttpResponseM ...
- Action Results in MVC
- ASP.NET MVC- Controllers and Routing- Controller Overview
In this tutorial, Stephen Walther introduces you to ASP.NET MVC controllers. You learn how to create ...
- 第十五章 提升用户体验 之 设计实现MVC controllers 和 actions
1. 概述 controllers 和 actions 是 ASP.NET MVC4中非常重要的组成部分. controller管理用户和程序间的交互,使用action作为完成任务的方式. 如果是包含 ...
随机推荐
- NSUInteger和NSInteger和int
int和NSInteger其实是差不多的,但更推荐使用NSInteger,因为使用NSInteger,这样就不用考虑设备是32位还是64位了. NSUInteger是无符号的,即没有负数,NSInte ...
- redhat 5.0 python2.4升级到2.7
)安装devtoolset yum groupinstall "Development tools" )安装编译Python需要的包包 yum install zlib-devel ...
- quartz 报错:java.lang.classNotFoundException
最近在做一个调度平台改造的项目,quartz在测试环境跑的是单机环境,生产上两台服务器做集群. 测试环境是ok的,生产上线后报错,一个类java.lang.classNotFoundException ...
- 这种写法用过没:string.Format("{0,-10}", 8)
1 2 3 4 var s1 = string.Format("{0,-10}", 8); var s2 = string.Format("{0,10}", 8 ...
- 编程以外积累: 如何给项目生成类似VS2008的说明文档
1:[下载] 目前微软提供的官方开源工具 Sandcastle结果跑到项目中一看,抬头就来了这么一段: The Sandcastle CodePlex project is no longer und ...
- delta simulation time[(delta cycle), (delta delay)]
"Delta cycles are an HDL concept used to order events that occur in zero physical time."si ...
- pcap支持Python2.7.8解决办法
pcap库只支持到python2.5. pip install pcap在python2.7.8找不到. 只需要将网盘的2个文件放到python安装目录下lib/site-package文件夹即可 链 ...
- iOS应用审核的通关秘籍
磨刀不误砍柴工.作为手机应用开发者,你需要向应用商店提交应用审核,迅速通过审核可以让你抢占先机.对苹果iOS应用开发者来说尤其如此.苹果应用商店的审核近乎吹毛求疵,下面这些清单可以让你知道苹果会在哪些 ...
- Mac下sublime text 的“package control”安装
小伙伴们好,我根据昨晚的经历写一个小总结:关于“Mac下sublime text 的“package control”安装”.本来安装package control是一个无比简单的事情,即使是初次使用 ...
- 整理SVN代码-->正式环境的代码
最近我被分配到了合并正式补丁代码的工作.聊聊整个流程 第一步解压补丁