猿教程 Logo

Asp.Net Core-Action Results

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

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

  • 这个基类允许我们访问大量关于请求的上下文信息,以及帮助我们构建发送回客户端的返回结果。

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

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

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

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

操作方法可以返回不同类型的操作结果。 ActionResult类是所有操作结果的基类。 以下是不同类型的操作结果及其行为的列表。

名称作用
ContentResult返回字符串
FileContentResult返回文件内容
FilePathResult返回文件内容
FileStreamResult返回文件内容。
EmptyResult不返回任何内容
JavaScriptResult返回要执行的脚本
JsonResult返回JSON格式的数据
RedirectToResult重定向到指定的URL
HttpUnauthorizedResult返回403 HTTP状态代码
RedirectToRouteResult重定向到不同的操作/不同的控制器操作
ViewResult作为视图引擎的响应接收
PartialViewResult接收作为视图引擎的响应

案例1

让我们通过打开HomeController类并将HomeController从Controller类派生来执行一个简单的示例。 此基类位于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等的模型对象。

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

  • 它只需要返回决定,然后MVC框架将获取到控制器的结果并转换成控制器想要的格式并通过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操作方法中,我们要返回一个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响应。

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


阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/ASPNET-CORE/core-actionresults.html