網(wǎng)站首頁(yè) 編程語(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
相關(guān)推薦
- 2022-09-24 python中的[1:]、[::-1]、X[:,m:n]和X[1,:]的使用_python
- 2022-06-23 Python實(shí)現(xiàn)希爾排序,歸并排序和桶排序的示例代碼_python
- 2022-08-26 C#中WPF內(nèi)存回收與釋放LierdaCracker的實(shí)現(xiàn)_C#教程
- 2022-09-20 C#使用winform實(shí)現(xiàn)進(jìn)度條效果_C#教程
- 2023-03-28 Python中l(wèi)ist列表添加元素的3種方法總結(jié)_python
- 2022-06-25 python格式化輸出實(shí)例(居中、靠右及靠左對(duì)齊)_python
- 2023-03-16 Python庫(kù)functools示例詳解_python
- 2021-12-14 HTML+jQuery實(shí)現(xiàn)簡(jiǎn)單的登錄頁(yè)面_jquery
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支