免费网站空间论坛,网站开发总结文档,行距网站,wordpress vrASP.NET Core为Web API控制器方法返回类型提供了如下几个选择#xff1a; Specific type IActionResult ActionResultT
1. 返回指定类型#xff08;Specific type#xff09; 最简单的API会返回原生的或者复杂的数据类型#xff08;比如#xff0c;string 或者…
ASP.NET Core为Web API控制器方法返回类型提供了如下几个选择 Specific type IActionResult ActionResultT
1. 返回指定类型Specific type 最简单的API会返回原生的或者复杂的数据类型比如string 或者自定义对象类型。考虑如下的Action方法其返回了一个自定义的Author对象的集合。
[HttpGet] public ListAuthor Get() _repository.GetAuthors(); [HttpGet] public IEnumerableAuthor Get() { return _repository.GetAuthors(); } 从 NetCore 3.0 开始你不仅可以定义同步形式的 IEnumerableAuthor方法也可以定义异步形式的 IAsyncEnumerableT方法不同点在于后者是一个异步模式的集合好处就是不会导致同步迭代既不阻塞数据库也不阻塞主线程。
下面的代码展示了如何改造 Get 方法两个方法返回都是不阻塞的 [HttpGet] public IEnumerableAuthor Get() { var authors _repository.GetAuthors();// 需要等待authors全部查询完成才会进入下一步迭代但是返回时又做了一个判断筛选返回是不阻塞的 foreach (var author in authors) // 适合数据库量大时只做全部查询然后通过foreach筛选yield迭代返回 { if(author.isMale){ yield return author; } } }
[HttpGet] public async IAsyncEnumerableAuthor Get() //异步迭代既不会阻塞数据库也不阻塞主线程 { var authors GetAuthorsAsync(); // 使用GetAuthorsAsync异步方法不用authors查询完毕就会进入下一步迭代返回authors await foreach (var author in authors) { yield return author; } } 2. 返回 IActionResult 实例 如果你要返回 data httpcode 的双重需求那么 IActionResult 就是你要找的东西下面的代码片段展示了如何去实现。
[HttpGet] public IActionResult Get() { if (authors null) return NotFound(No records); return Ok(authors); // 必须有Ok等方法包装 } 上面的代码有 OkNotFound 两个方法对应着 OKResultNotFoundResult Http Code 对应着 200404。当然还有其他的如CreatedResult, NoContentResult, BadRequestResult, UnauthorizedResult, 和 UnsupportedMediaTypeResult都是 IActionResult 的子类。 3. 返回 ActionResultT 实例 ActionResultT包装了前面这种模式可以返回 IActionResultdata httpcode也可以返回指定类型T
[HttpGet] public ActionResultIEnumerableAuthor Get() { if (authors null) return NotFound(No records); return authors; } 和之前IActionResult的 Get 方法相比这里如果不需要返回httpCode则直接返回 authors 而不需要再用 OK(authors) 包装是一个非常好的简化而IActionResult必须要使用Ok等包装一下返回。
接下来再把 Get 方法异步化 [HttpGet] public async TaskActionResultIEnumerableAuthor Get() { var data await GetAuthors(); if (data null) return NotFound(No record); return data; } 如果你有一些定制化需求可以实现一个自定义的 ActionResult 类做法就是实现 IActionResult 中的 ExecuteResultAsync 方法即可。
如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。