ASP.NET Core – 操作结果

ASP.NET Core – 操作结果


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

  • 这个基类让我们可以访问很多关于请求的上下文信息,以及帮助我​​们构建结果发送回客户端的方法。

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

  • 这些结果通常被封装到一个实现 IActionResult 接口的对象中。

  • 有许多不同的结果类型实现了这个接口——结果类型可以包含模型或下载文件的内容。

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

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

Name 行为
ContentResult 返回一个字符串
FileContentResult 返回文件内容
FilePathResult 返回文件内容
FileStreamResult 返回文件内容。
EmptyResult 什么都不返回
JavaScriptResult 返回执行脚本
JsonResult 返回 JSON 格式的数据
RedirectToResult 重定向到指定的 URL
HttpUnauthorizedResult 返回 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"); 
      } 
   } 
}

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

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

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

行动结果

您现在可以看到与我们之前的响应没有任何不同的响应。它仍然只是一个纯文本响应。

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

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

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

  • 控制器需要做的就是做出决定,控制器不必将其决定的结果直接写入响应。

  • 它只需要返回决定,然后框架将获取结果并了解如何将该结果转换为可以通过 HTTP 发回的内容。

示例 2

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

楷模

如上图所示,在 Name 字段中输入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 action 方法中,我们想要返回一个 Employee 对象。下面是 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 响应。

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

马克·厄普斯顿

觉得文章有用?

点个广告表达一下你的爱意吧 !😁