您的位置:首页 > 编程语言 > ASP

ASP.NET Core 中文文档 第四章 MVC(4.1)Controllers, Actions 和 Action Results

2016-09-29 09:12 1001 查看
原文: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 应用程序中横切关注点的其他例子:

Error handling

Response Caching


提示

在 MVC 应用程序里,很多横切关注点都可以利用过滤器来处理。还有另一种对所有 ASP.NET Core 应用程序都有效的选择需要记住,就是自定义 中间件(middleware)


返回目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: