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

ASP.NET Core 动作结果

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

动作结果 ( Action Result )

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

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

这些结果通常被封装到实现 IActionResult 接口的对象中,有大量的不同类型的结果实现了该接口,这些结果类型可以包含模型或文件的内容以供下载

这些不同的结果类型即可以返回 JSON,也可以返回 XML,或者 HTML 视图

动作基本上可以返回任意不同类型的动作结果。它们都有一个共同的基类:ActionResult

下表列出了不同种类的动作结果及其行为

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

范例: ContentResult

现在,我们修改 HomeController.cs ,引入命名空间 Microsoft.AspNetCore.Mvc,并修改 HomeController 继承自 Controller

下面代码是 HomeController 类的完整实现

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 作为默认格式

保存所有的文件,重启应用程序,然后访问首页,我们将得到如下结果

ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程的更多相关文章

  1. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 登录登出 上一章节我们总算完善了注册的功能,而且也添加了一个用户,现 ...

  2. ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新增用户 上一章节我们实现了一个注册表单,但也留了一些东西还没完成, ...

  3. ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 用户注册 上一章节我们终于迁移完了 Identity 的数据,也创建 ...

  4. ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 验证特性 上一章节我们简单介绍了 ...

  5. ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 编辑表单 上一章节我们介绍了标签助手和 HT ...

  6. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...

  7. ASP.NET Core 属性路由 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 属性路由 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 属性路由 经过前面章节的学习,想必你已经对 ASP.NET Core ...

  8. ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 路由 前两章节中,我们提到 ASP.NET Core 支持 MVC 开发 ...

  9. ASP.NET Core 中间件 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 中间件 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 中间件 上一章节中,我们我们有讲到 Startup 类中的 Confi ...

随机推荐

  1. 观CSDN站点小Bug有感

            今天早上在浏览博客的时候偶然发现CSDN博客的数据出现了异常,我也是头一次看到这么明显的Bug.详细什么表现呢?先来看个截图.例如以下:             常常看CSDN博客的人 ...

  2. OpenGL_ES-纹理

    OpenGL_ES2.0 -纹理 一:纹理基础: 1: 纹素的概念: 一个二维纹理在OpenGLES2.0中是非经常见的,二维纹理就是一个二维数组,每一个数据元素称为纹素,详细格式例如以下: GL_R ...

  3. Eclipse下配置Ant脚本 自己主动打包带签名的Android apk

    尽管eclipse非常少用了,可是在古老的项目上还是会用到.一个麻烦事是打带签名包的时候.非常不方便.下边纪录下配置ant,自己主动打包带签名apk的过程,作为备忘.(PC环境为MAC) 1,第一步得 ...

  4. linux系统 wm9713声卡配置 记录

    近期在搞wm9713的外音播放和耳机的检測,搞了几天不负所望,最终搞定了.现记录例如以下,开发板为real210 v6.2版本号: 假设要让外音输出,那么确保wm9713的0x1c寄存器的值为0x12 ...

  5. linux下如何获取某一进程占用的物理内存和虚拟内存

    首先,ps -A查看你所查看进程的进程号 ps -A 加入进程号为pid 那么使用如下脚本,可以打印该进程使用的虚拟内存和物理内存: root@Storage:/mnt/mtd# cat rss.sh ...

  6. POJ 1251 Jungle Roads (zoj 1406) MST

    传送门: http://poj.org/problem?id=1251 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=406 P ...

  7. JDBC之一:JDBC快速入门 分类: B1_JAVA 2014-02-19 14:49 745人阅读 评论(0) 收藏

      (1)下载Oracle的JDBC驱动,一般放在$ORACLE_HOME/jdbc/lib目录,关于驱动的版本请见: http://elf8848.iteye.com/blog/811037     ...

  8. Ubuntu 16.04下安装Anaconda

    1.下载Anaconda到系统 官网:https://www.anaconda.com/download/ 清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu. ...

  9. 基于 MySQL 5.6 keepalived的双主搭建

    环境介绍: 说明 IP 节点1 192.168.56.56 节点2 192.168.56.57 w_ip 192.168.56.6 安装keepalived tar -zxvf keepalived- ...

  10. Android5.0网络之ipv6

    移动设备的大量兴起势必进一步加强ip地址不足的危机. ipv6或许成为一种比較好的选择方案. ipv6地址的获取分为两种方式:无状态:有状态 无状态:通过接收路由公告(RA)来设置自己的ipv6地址 ...