• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

详解如何在ASP.NET Core Web API中以三种方式返回数据

c# 搞代码 4年前 (2022-01-09) 20次浏览 已收录 0个评论

在 ASP.NET Core 中有三种返回 数据 和 HTTP状态码 的方式,最简单的就是直接返回指定的类型实例,如下代码所示:

  [ApiController]
  [Route("[controller]")]
  public class WeatherForecastController : ControllerBase
  {
    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
      var rng = new Random();
      return Enumerable.Range(1, 5).Select(index => new WeatherForecast
      {
        Date = DateTime.Now.AddDays(index),
        TemperatureC = rng.Next(-20, 55),
        Summary = Summaries[rng.Next(Summaries.Length)]
      })
      .ToArray();
    }
  }

除了这种,也可以返回 IActionResult 实例 和 ActionResult <T> 实例。

虽然返回指定的类型 是最简单粗暴的,但它只能返回数据,附带不了http状态码,而 IActionResult 实例可以将 数据 + Http状态码 一同带给前端,最后就是 ActionResult<T> 它封装了前面两者,可以实现两种模式的自由切换,🐂吧。

接下来一起讨论下如何在 ASP.NET Core Web API 中使用这三种方式。

创建 Controller 和 Model 类

在项目的 Models 文件夹下新建一个 Author 类,代码如下:

  public class Author
  {
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
  }

有了这个 Author 类,接下来创建一个 DefaultController 类。

using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;

namespace IDGCoreWebAPI.Controllers
{
  [Route("api/[controller]")]
  [ApiController]
  public class DefaultController : ControllerBase
  {
    private readonly List<Author> authors = new List<Author>();
    public DefaultController()
    {
      authors.Add(new Author()
      {
        Id = 1,
        FirstName = "Joydip",
        LastName = "Kanjilal"
      });
      authors.Add(new Author()
      {
        Id = 2,
        FirstName = "Steve",
        LastName = "Smith"
      });
    }

    [HttpGet]
    public IEnumerable<Author> Get()
    {
      return authors;
    }

    [HttpGet("{id}", Name = "Get")]
    public Author Get(int id)
    {
      return authors.Find(x => x.Id == id);
    }
  }
}

在 Action 中返回 指定类型

最简单的方式就是在 Action 中直接返回一个 简单类型 或者 复杂类型,其实在上面的代码清单中,可以看到 Get 方法返回了一个 authors 集合,看清楚了,这个方法定义的是 IEnumerable<Author>。

[HttpGet]
public IEnumerable<Author> Get()
{
  return authors;
}

在 ASP.NET Core 3.0 开始,你不仅可以定义同步形式的 IEnumerable<Author>方法,也可以定义异步形式的 IAsyncEnumerable<T>方法,后者的不同点在于它是一个异步模式的集合,好处就是 不阻塞 当前的调用线程,关于 IAsyncEnumerable<T> 更多的知识,我会在后面的文章中和大家分享。

下面的代码展示了如何用 异步集合 来改造 Get 方法。

[HttpGet]
public async IAsyncEnumerable<strong style="color:transparent">来源gaodai#ma#com搞@代~码$网</strong><Author> Get()
{
  var authors = await GetAuthors();
  await foreach (var author in authors)
  {
    yield return author;
  }
}

在 Action 中返回 IActionResult 实例

如果你要返回 data + httpcode 的双重需求,那么 IActionResult 就是你要找的东西,下面的代码片段展示了如何去实现。

[HttpGet]
public IActionResult Get()
{
 if (authors == null)
   return NotFound("No records");

 return Ok(authors);
}


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解如何在ASP.NET Core Web API中以三种方式返回数据

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址