ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文: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 对象时,它可能被序列化为 XML 或 JSON 或其它格式, 至于什么格式,由应用程序启动时向 MVC 提供的配置信息决定。如果我们没有显式的配置任何东西,那么将会使用 JSON 作为默认格式
保存所有的文件,重启应用程序,然后访问首页,我们将得到如下结果
ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程的更多相关文章
- ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 登录登出 上一章节我们总算完善了注册的功能,而且也添加了一个用户,现 ...
- ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新增用户 上一章节我们实现了一个注册表单,但也留了一些东西还没完成, ...
- ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 用户注册 上一章节我们终于迁移完了 Identity 的数据,也创建 ...
- ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 验证特性 上一章节我们简单介绍了 ...
- ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 编辑表单 上一章节我们介绍了标签助手和 HT ...
- ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...
- ASP.NET Core 属性路由 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 属性路由 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 属性路由 经过前面章节的学习,想必你已经对 ASP.NET Core ...
- ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 路由 前两章节中,我们提到 ASP.NET Core 支持 MVC 开发 ...
- ASP.NET Core 中间件 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 中间件 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 中间件 上一章节中,我们我们有讲到 Startup 类中的 Confi ...
随机推荐
- 12、USB设备驱动程序
linux-3.4.2\driver\hid\usbhid\usbmouse.c 内核只带USB驱动程序 (hub和usb是两个不同的设备,hub在内核上电的过程中在usb_hub_init函数中调用 ...
- [PReact] Create a Hello World App with Preact
By creating a simple ‘hello world’ example application first in vanilla Javascript, and then in Prea ...
- iOS Universal Static Framework 手动转 XCode Cocoa Framework
不须要又一次创建Project,手动改动project设置. 第一步:在Project文件里,改动type,去掉static 1. 搜索wrapper.framework.static,去掉stati ...
- mac os 虚拟机安装
https://blog.csdn.net/u011415782/article/details/78505422 感谢
- Android隐藏输入法
输入法隐藏两种方式: /** * 隐藏输入法 * * @param myActivity */ public static void hideInput(Activity myActivity,Edi ...
- Html表单中遇到的问题
原文 https://www.jianshu.com/p/4466b8294007 大纲 1.表单提交的方式GET和POST的区别 2.js无法对input的file类型的值进行赋值 3.js获取in ...
- ztree实现左边动态生成树,右边为具体信息功能
页面原型图: 图片.png 功能需求:点击左边树上的子节点,像后台发送请求,将请求到的信息展示在右边的表单里面 前端代码实现: 引入css文档: <link rel="styleshe ...
- Instruments性能优化-Core Animation
简书地址:http://www.jianshu.com/users/6cb2622d5eac/latest_articles 当App发展到一定的规模.性能优化就成为不可缺少的一点.可是非常多人,又对 ...
- Colder框架硬核更新(Sharding+IOC)
目录 引言 控制反转 读写分离分库分表 理论基础 设计目标 现状调研 设计思路 实现之过五关斩六将 动态对象 动态模型缓存 数据源移植 查询表达式树深度移植 数据合并算法 事务支持 实际使用 展望未来 ...
- IDEA多模块父子依赖maven项目war包部署
IDEA多模块父子依赖maven项目war包部署 Posted on 2018-04-25 | In IDEA | | Visitors 286 IDEA全称为IntrlliJ IDEA,它是一款非常 ...