原文:ASP.NET Core 动做结果 - ASP.NET Core 基础教程 - 简单教程,简单编程html
前面的章节中,咱们一直使用简单的 C#
类做为控制器。 虽然这些类不是从基类派生的,但仍然能够在 MVC 中使用这种方法。 固然了,对于控制器,但更常见的作法是从 Microsoft.AspNetCore.Mvc
命名空间中提供的控制器基类中派生控制器。本章中,咱们将尝试这么作,而且学习动做结果 ( Action Results )。编程
Microsoft.AspNetCore.Mvc
命名空间下的基类 Controller
让咱们可以访问不少关于 HTTP 请求的上下文信息,以及提供了一些方法帮助我们构建返回给回客户端的结果json
返回的响应的结果中,咱们能够发送简单的字符串或者整数,或者发送像对象这样的复杂数据来表示学生或大学或餐馆等信息,以及与该对象关联的全部数据markdown
这些结果一般被封装到实现 IActionResult
接口的对象中,有大量的不一样类型的结果实现了该接口,这些结果类型能够包含模型或文件的内容以供下载框架
这些不一样的结果类型便可以返回 JSON,也能够返回 XML,或者 HTML 视图less
动做基本上能够返回任意不一样类型的动做结果。它们都有一个共同的基类:ActionResult
ide
下表列出了不一样种类的动做结果及其行为学习
动做名称( 类 ) | 行为 |
---|---|
ContentResult | 返回一串字符串 |
FileContentResult | 返回文件的内容 |
FilePathResult | 返回路径文件的内容 |
FileStreamResult | 返回流文件的内容 |
EmptyResult | 返回空 |
JavaScriptResult | 返回一段 JavaScript 代码 |
JsonResult | 返回 JSON 格式的数据 |
RedirectToResult | 重定向到某个 URL |
HttpUnauthorizedResult | 返回 403 未受权状态码 |
RedirectToRouteResult | 重定向到不一样的控制器或方法 |
ViewResult | 从视图引擎中返回一个响应 |
PartialViewResult | 从视图引擎中返回一个响应 |
如今,咱们修改 HomeController.cs
,引入命名空间 Microsoft.AspNetCore.Mvc
,并修改 HomeController
继承自 Controller
。spa
下面代码是 HomeController
类的完整实现code
using System; using Microsoft.AspNetCore.Mvc; namespace HelloWorld.Controllers { public class HomeController: Controller { public ContentResult Index() { return Content("你好,世界! 这条消息来自使用了 Action Result 的 Home 控制器"); } } }
咱们能够看到,Index()
方法返回了一个 ContentResult
类型的结果。ContentResult
是实现了 ActionResult
接口的不一样结果类型之一
在 Index()
方法中,咱们将一个字符串传递给 Content()
。 Content()
方法会产生一个 ContentResult
,也就是说,Index()
方法会返回 ContentResult
保存 HomeController.cs
文件,重启应用程序,而后访问跟目录 /
,咱们将会获得如下输出
咱们能够看到,这个响应和以前咱们看到的响应几乎没有任何区别,它仍然只是一个纯文本的响应
你可能很想知道使用 ActionResult 来生成东西有什么优点
在 Mvc 模式中,控制器决定接下来要作什么,返回一个字符串或 HTML 或返回可能被序列化为 JSON 等的模型对象
Mvc 中的控制器须要作的就是作出决定,但控制器没必要直接在响应中写入决策结果。 它只须要返回结果,而后框架会使用这些结果并理解如何将结果转换为可经过 HTTP 发回的内容
若是你不能理解上面这些内容,不要紧,咱们再来看一个范例,此次咱们使用 ObjectResult
在解决方案管理器中的 HelloWorld
上点击右键,建立一个新文件夹并将其命名为 Models
。 在 Models
文件夹中,添加一个用于表示雇员的 Employee
类
建立完成后,目录结构以下
Employee.cs
中的内容以下
using System; namespace HelloWorld.Models { public class Employee { public Employee() { } } }
修改刚刚建立的 Employee
类,添加两个属性,一个整型的 ID
和 一个字符串类型的 Name
,修改完成后 Employee.cs
中的内容以下
using System; namespace HelloWorld.Models { public class Employee { public Employee() { } public int ID { get; set; } public string Name { get; set; } } }
而后咱们回到 HomeController
控制器,修改 Index()
方法,返回一个 Employee
对象。
修改完成后的 HomeController.cs
内容以下
using System; using Microsoft.AspNetCore.Mvc; using HelloWorld.Models; namespace HelloWorld.Controllers { public class HomeController: Controller { public ObjectResult Index() { var employee = new Employee { ID = 1, Name = "语飞"}; return new ObjectResult(employee); } } }
如今,返回的不是 Content,而是返回一个不一样类型的结果 ObjectResult
。 若是咱们想要一个 ObjectResult,咱们须要建立或实例化一个 ObjectResult 并将一些模型对象做为参数传递给它
在 MVC 框架中,ObjectResult 是特殊的,由于当咱们返回一个 ObjectResult 时,MVC 框架将访问这个对象。并将这个对象作一些转换,而后做为 HTTP 响应返回给客户端
在转换 ObjectResult 对象时,它可能被序列化为 XML 或 JSON 或其它格式, 至于什么格式,由应用程序启动时向 MVC 提供的配置信息决定。若是咱们没有显式的配置任何东西,那么将会使用 JSON 做为默认格式
保存全部的文件,重启应用程序,而后访问首页,咱们将获得以下结果