日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Netcore?Webapi返回?cái)?shù)據(jù)的三種方式示例_C#教程

作者:Bonnie愛學(xué)習(xí) ? 更新時(shí)間: 2022-11-10 編程語(yǔ)言

ASP.NET Core為Web API控制器方法返回類型提供了如下幾個(gè)選擇:

Specific type

IActionResult

ActionResult<T>

1. 返回指定類型(Specific type)

最簡(jiǎn)單的API會(huì)返回原生的或者復(fù)雜的數(shù)據(jù)類型(比如,string 或者自定義對(duì)象類型)。考慮如下的Action方法,其返回了一個(gè)自定義的Author對(duì)象的集合。

[HttpGet]
public List<Author> Get() =>
    _repository.GetAuthors();
[HttpGet]
public IEnumerable<Author> Get()
{
   return _repository.GetAuthors();
}

從?NetCore 3.0 開始,你不僅可以定義同步形式的?IEnumerable<Author>方法,也可以定義異步形式的?IAsyncEnumerable<T>方法,后者的不同點(diǎn)在于它是一個(gè)異步模式的集合,好處就是?不阻塞?當(dāng)前的調(diào)用線程。

下面的代碼展示了如何用?異步集合?來(lái)改造 Get 方法。

[HttpGet]
public async IAsyncEnumerable<Author> Get()
{
   var authors = await GetAuthors();
   await foreach (var author in authors)
   {
        yield return author;
   }
}

2. 返回 IActionResult 實(shí)例

如果你要返回?data + httpcode?的雙重需求,那么 IActionResult 就是你要找的東西,下面的代碼片段展示了如何去實(shí)現(xiàn)。

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

上面的代碼有?Ok,NotFound?兩個(gè)方法,對(duì)應(yīng)著 OKResult,NotFoundResult, Http Code 對(duì)應(yīng)著 200,404。當(dāng)然還有其他的如:CreatedResult, NoContentResult, BadRequestResult, UnauthorizedResult, 和 UnsupportedMediaTypeResult,都是 IActionResult 的子類。

3. 返回?ActionResult<T>?實(shí)例

ActionResult<T>包裝了前面這種模式:可以返回 IActionResult(data + httpcode),也可以返回指定類型T

[HttpGet]
public ActionResult<IEnumerable<Author>> Get()
{
  if (authors == null)
       return NotFound("No records");
   return authors;
}

和之前IActionResult的 Get 方法相比,這里直接返回?authors?而不需要再用?OK(authors)?包裝,是一個(gè)非常好的簡(jiǎn)化。

接下來(lái)再把 Get 方法異步化:

[HttpGet]
public async Task<ActionResult<IEnumerable<Author>>> Get()
{
   var data = await GetAuthors();
   if (data == null)
        return NotFound("No record");
   return data;
}

如果你有一些定制化需求,可以實(shí)現(xiàn)一個(gè)自定義的 ActionResult 類,做法就是實(shí)現(xiàn) IActionResult 中的 ExecuteResultAsync 方法即可。

原文鏈接:https://juejin.cn/post/7145008760971493390

欄目分類
最近更新