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#中的靜態(tài)字段double.Epsilon實(shí)例詳解
double.Epsilon 是C#中的一個(gè)靜態(tài)字段,表示 double 數(shù)據(jù)類型的最小可表示的正數(shù)值,這篇文章主要介紹了C#中的靜態(tài)字段double.Epsilon的相關(guān)知識,需要的朋友可以參考下2024-01-01linux操作系統(tǒng)安裝MONO執(zhí)行C#程序的詳解步驟
這篇文章主要介紹了linux操作系統(tǒng)安裝MONO執(zhí)行C#程序詳解步驟,有需要的可以參考一下2013-12-12C# Onnx實(shí)現(xiàn)輕量實(shí)時(shí)的M-LSD直線檢測
這篇文章主要為大家詳細(xì)介紹了C#如何結(jié)合Onnx實(shí)現(xiàn)輕量實(shí)時(shí)的M-LSD直線檢測,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11C#無邊框窗體實(shí)現(xiàn)以及拖動(dòng)代碼
我們給大家分享了關(guān)于C#無邊框窗體實(shí)現(xiàn)以及拖動(dòng)代碼,大家在程序設(shè)計(jì)的時(shí)候如果用的到一起跟著小編學(xué)習(xí)下吧。2018-03-03如何在C#項(xiàng)目中鏈接一個(gè)文件夾下的所有文件詳解
很多時(shí)候我們需要獲取一個(gè)結(jié)構(gòu)未知的文件夾下所有的文件或是指定類型的所有文件,下面這篇文章主要給大家介紹了關(guān)于如何在C#項(xiàng)目中鏈接一個(gè)文件夾下的所有文件,需要的朋友可以參考下2023-02-02C# SDK實(shí)現(xiàn)百度云OCR的文字識別功能
這篇文章主要為大家詳細(xì)介紹了C# SDK實(shí)現(xiàn)百度云OCR的文字識別功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11C# 創(chuàng)建Excel氣泡圖的實(shí)例代碼
這篇文章主要介紹了C# 創(chuàng)建Excel氣泡圖的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01