从 Blazor 应用程序中的 WEB API 返回数据

use*_*651 5 c# blazor webapi

考虑以下两段代码。两者都将数据返回到 Web API Get 调用。两者都返回一个项目列表。两者都有效。第一个取自 Visual Studio 入门 Blazor Wasm 应用程序。第二个来自在线教程。tblTitles 是远程数据库中的一个表,通过 _dataContext 访问。

应该使用其中哪一个,为什么?或者也许一个更适合特定情况?

    [HttpGet]
    //First method:
    public IEnumerable<TitlesTable> Get()
    {
        var titles =  _dataContext.tblTitles.ToList();
        return titles;
    }

    //Second method:
    public async Task<IActionResult> Get()
    {
        var titles = await _dataContext.tblTitles.ToListAsync();
        return Ok(titles);
    }
Run Code Online (Sandbox Code Playgroud)

Noa*_*ahl 5

我相信您注意到了不同的可用控制器返回类型。从该文档页面:

ASP.NET Core 为 Web API 控制器操作返回类型提供以下选项:

  • 具体类型
  • IActionResult
  • ActionResult<T>

该页面提供了何时使用每个选项的注意事项。


Hen*_*man 5

您的片段之间有 2 个差异,应单独考虑。

1. 同步或异步

大多数操作都会执行一些 I/O,而异步/等待模式更适合处理这些操作,它将允许您的服务器处理更多的并发请求。

2. 纯数据或IActionResult

直接返回数据是要求 ASP.NET 将其包装在响应中。这很简单,但是一旦您尝试添加验证,就会出现问题。任何错误都将作为状态 500(内部服务器错误)返回,设计良好的 API 在适用时应该能够返回 400(错误请求)或 404(未找到)。

因此,总而言之, async Task<IActionResult>async Task<ActionResult<T>>是控制器操作的最佳模式。


第一个取自 Visual Studio 入门 Blazor Wasm 应用程序。

不,不是。演示控制器生成一些天气数据,但不执行任何 I/O。

这使得所选择的简短形式可以接受,但认为它具有“演示”质量水平。