ASP.NET Core - 动作结果

在本章中,我们将讨论行动结果.在前面的章节中,我们一直使用简单的C#类作为控制器.这些类不是从基类派生的,您可以将此方法与MVC一起使用,但从Microsoft.AspNet.Mvc命名空间中提供的控制器基类派生控制器更为常见.

  • 这个基类使我们能够访问大量有关请求的上下文信息,以及帮助我们构建结果以发送回客户端的方法.

  • 您可以在响应中发回简单的字符串和整数.您还可以发回复杂的对象,如对象,以代表学生,大学或餐馆等,以及与该对象相关的所有数据.

  • 这些结果是通常封装到实现IActionResult接口的对象中.

  • 有许多不同的结果类型实现此接口 - 结果类型可以包含模型或内容一个可供下载的文件.

  • 这些不同的结果类型可以让我们将JSON发送回客户端或XML或构建HTML的视图.

动作基本上会返回不同类型的动作结果. ActionResult类是所有操作结果的基础.以下是不同类型的操作结果及其行为的列表.

名称行为
ContentResult返回一个字符串
FileContentResult返回文件内容
FilePathResult返回文件内容
FileStreamResult返回文件内容.
EmptyResult什么都不返回
JavaScriptResult返回执行脚本
JsonResult返回JSON格式的数据
RedirectToResult重定向到指定的网址
HttpUnauthorizedResultRetu rns 403 HTTP状态代码
RedirectToRouteResult重定向到不同的操作/不同的控制器行动
ViewResult作为视图引擎的响应收到
PartialViewResult作为视图引擎的响应收到

示例1

让我们通过打开 HomeController 类来执行一个简单的示例从基于控制器的类派生它.此基类位于 Microsoft.AspNet.Mvc 命名空间中.以下是HomeController类的实现.

using Microsoft.AspNet.Mvc; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks;  

namespace FirstAppdemo.Controllers  { 
   public class HomeController : Controller { 
      public ContentResult Index() { 
         return Content("Hello, World! this message is from 
            Home Controller using the Action Result"); 
      } 
   } 
}

您现在可以看到索引方法正在返回ContentResult,它是其中之一结果类型和所有这些结果类型最终实现了一个接口,即 ActionResult .

在Index方法中,我们将一个字符串传递给Content方法.此Content方法生成ContentResult;这意味着Index方法现在将返回 ContentResult .

让我们保存 HomeController 类并在浏览器中运行该应用程序.它将生成以下页面.

Action Result

你现在可以看到一个与我们之前的反应看起来没有任何不同的回应.它仍然只是一个纯文本响应.

  • 你可能想知道使用什么东西有什么好处产生 ActionResult .

  • 典型的优点是它只是封装控制器决策的正式方式.

  • 控制器决定下一步做什么,返回字符串或HTML或返回可能被序列化为JSON等的模型对象.

  • 控制器需要做的就是做出决定,控制器不必直接在响应中写下决定的结果.

  • 它只需要返回决定,然后它就是一个框架,它将获取结果并理解如何将结果转换为可以通过HTTP发回的内容.

示例2

让我们再举一个例子.在项目中创建一个新文件夹并将其命名为模型.在Models文件夹中,我们想要添加一个可以代表Employee的类.

Models

在名称字段中输入 Employee.cs ,如上面的屏幕截图所示.这里,Employee类的实现包含两个属性.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks;  

namespace FirstAppDemo.Models { 
   public class Employee { 
      public int ID { get; set; } 
      public string Name { get; set} 
   } 
}

HomeController 的Index操作方法中,我们想要返回一个员工对象.以下是HomeController的实现.

using FirstAppDemo.Models; 
using Microsoft.AspNet.Mvc; 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks;  

namespace FirstAppdemo.Controllers { 
   public class HomeController : Controller { 
      public ObjectResult Index() { 
         var employee = new Employee { ID = 1, Name = "Mark Upston"}; 
         return new ObjectResult(employee); 
      } 
   } 
}

现在,我们将返回不同类型的结果,而不是返回内容被称为 ObjectResult .如果我们想要一个ObjectResult,我们需要创建或实例化一个ObjectResult并将一些模型对象传递给它.

  • ObjectResult在MVC框架中很特殊,因为当我们返回一个ObjectResult时,MVC框架会查看这个对象.此对象需要在HTTP响应中表示.

  • 此对象应序列化为XML或JSON或其他格式,最终将做出决定基于您在启动时提供给MVC的配置信息.如果你没有配置任何东西,你只需要一些默认值,默认是JSON响应.

保存所有文件和刷新浏览器.您将看到以下输出.

Mark Upston