ASP.NET Core 动做结果 - ASP.NET Core 基础教程 - 简单教程,简单编程

原文:ASP.NET Core 动做结果 - ASP.NET Core 基础教程 - 简单教程,简单编程html

ASP.NET Core 动做结果

前面的章节中,咱们一直使用简单的 C# 类做为控制器。 虽然这些类不是从基类派生的,但仍然能够在 MVC 中使用这种方法。 固然了,对于控制器,但更常见的作法是从 Microsoft.AspNetCore.Mvc 命名空间中提供的控制器基类中派生控制器。本章中,咱们将尝试这么作,而且学习动做结果 ( Action Results )。编程

动做结果 ( Action Result )

Microsoft.AspNetCore.Mvc 命名空间下的基类 Controller 让咱们可以访问不少关于 HTTP 请求的上下文信息,以及提供了一些方法帮助我​​们构建返回给回客户端的结果json

返回的响应的结果中,咱们能够发送简单的字符串或者整数,或者发送像对象这样的复杂数据来表示学生或大学或餐馆等信息,以及与该对象关联的全部数据markdown

这些结果一般被封装到实现 IActionResult 接口的对象中,有大量的不一样类型的结果实现了该接口,这些结果类型能够包含模型或文件的内容以供下载框架

这些不一样的结果类型便可以返回 JSON,也能够返回 XML,或者 HTML 视图less

动做基本上能够返回任意不一样类型的动做结果。它们都有一个共同的基类:ActionResultide

下表列出了不一样种类的动做结果及其行为学习

动做名称( 类 ) 行为
ContentResult 返回一串字符串
FileContentResult 返回文件的内容
FilePathResult 返回路径文件的内容
FileStreamResult 返回流文件的内容
EmptyResult 返回空
JavaScriptResult 返回一段 JavaScript 代码
JsonResult 返回 JSON 格式的数据
RedirectToResult 重定向到某个 URL
HttpUnauthorizedResult 返回 403 未受权状态码
RedirectToRouteResult 重定向到不一样的控制器或方法
ViewResult 从视图引擎中返回一个响应
PartialViewResult 从视图引擎中返回一个响应

范例: ContentResult

如今,咱们修改 HomeController.cs ,引入命名空间 Microsoft.AspNetCore.Mvc,并修改 HomeController 继承自 Controllerspa

下面代码是 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

若是你不能理解上面这些内容,不要紧,咱们再来看一个范例,此次咱们使用 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 对象时,它可能被序列化为 XMLJSON 或其它格式, 至于什么格式,由应用程序启动时向 MVC 提供的配置信息决定。若是咱们没有显式的配置任何东西,那么将会使用 JSON 做为默认格式

保存全部的文件,重启应用程序,而后访问首页,咱们将获得以下结果

相关文章
相关标签/搜索