Netcore?Webapi返回?cái)?shù)據(jù)的三種方式示例
ASP.NET Core為Web API控制器方法返回類型提供了如下幾個(gè)選擇:
Specific type
IActionResult
ActionResult<T>
1. 返回指定類型(Specific type)
最簡單的API會返回原生的或者復(fù)雜的數(shù)據(jù)類型(比如,string 或者自定義對象類型)??紤]如下的Action方法,其返回了一個(gè)自定義的Author對象的集合。
[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)用線程。
下面的代碼展示了如何用 異步集合 來改造 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è)方法,對應(yīng)著 OKResult,NotFoundResult, Http Code 對應(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è)非常好的簡化。
接下來再把 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 方法即可。
以上就是Netcore Webapi返回?cái)?shù)據(jù)的三種方式示例的詳細(xì)內(nèi)容,更多關(guān)于Netcore Webapi 返回?cái)?shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
- .NetCore?Web?Api?利用ActionFilterAttribute統(tǒng)一接口返回值格式及問題解析
- 手把手教你AspNetCore WebApi數(shù)據(jù)驗(yàn)證的實(shí)現(xiàn)
- 手把手教你AspNetCore WebApi認(rèn)證與授權(quán)的方法
- .Net6集成IdentityServer4?+AspNetCore?Identity讀取數(shù)據(jù)表用戶且鑒權(quán)授權(quán)管理API
- ASP.NET?Core通過Microsoft.AspNetCore.App元包簡化程序集引用
- .NetCore?MemoryCache使用詳解
相關(guān)文章
C#實(shí)現(xiàn)json的序列化和反序列化實(shí)例代碼
這篇文章主要介紹了C#實(shí)現(xiàn)json的序列化和反序列化實(shí)例代碼,有需要的朋友可以參考一下2013-12-12
C#中IList<T>與List<T>的區(qū)別深入解析
本篇文章主要是對C#中IList<T>與List<T>的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
Unity3D基于UGUI實(shí)現(xiàn)虛擬搖桿
這篇文章主要為大家詳細(xì)介紹了Unity3D基于UGUI實(shí)現(xiàn)虛擬搖桿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
C#使用System.Net庫實(shí)現(xiàn)自動發(fā)送郵件功能
在C#編程環(huán)境中,實(shí)現(xiàn)郵件發(fā)送功能是一項(xiàng)常見的需求,無論是Web應(yīng)用程序還是Windows窗體應(yīng)用程序,下面小編就來為大家講講如何使用System.Net庫實(shí)現(xiàn)這一功能吧2025-03-03
C#框架winform實(shí)現(xiàn)簡單點(diǎn)餐系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#框架winform實(shí)現(xiàn)簡單點(diǎn)餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07

