📜  ASP.NET Core-操作结果

📅  最后修改于: 2020-11-21 04:56:55             🧑  作者: Mango


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

  • 这个基础类使我们可以访问有关请求的许多上下文信息,以及可以帮助我们建立结果以发送回客户端的方法。

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

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

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

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

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

Name Behavior
ContentResult Returns a string
FileContentResult Returns file content
FilePathResult Returns file content
FileStreamResult Returns file content.
EmptyResult Returns nothing
JavaScriptResult Returns script for execution
JsonResult Returns JSON formatted data
RedirectToResult Redirects to the specified URL
HttpUnauthorizedResult Returns 403 HTTP Status code
RedirectToRouteResult Redirect to different action/ different controller action
ViewResult Received as a response for view engine
PartialViewResult Received as a response for view engine

例子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 。在“模型”文件夹中,我们要添加一个可以表示Employee的类。

楷模

如上面的屏幕截图所示,在“名称”字段中输入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操作方法内部,我们想返回一个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); 
      } 
   } 
} 

现在,代替返回Content,我们将返回另一种类型的结果,即ObjectResult 。如果我们想要一个ObjectResult,我们需要创建或实例化一个ObjectResult并将一些模型对象传递给它。

  • ObjectResult在MVC框架中是特殊的,因为当我们返回ObjectResult时,MVC框架会查看该对象。该对象需要在HTTP响应中表示。

  • 该对象应序列化为XML或JSON或其他某种格式,最终,将根据您在启动时提供给MVC的配置信息来做出决定。如果您不进行任何配置,则只会得到一些默认值,并且默认值为JSON响应。

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

马克·阿普斯顿