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

Returning data from a WEB API in a Blazor App

考虑以下两段代码。两个 return 数据到一个 Web API Get 调用。两者都是 return 项列表。两者都有效。第一个取自 Visual Studio starter Blazor Wasm App。第二个来自在线教程。 tblTitles 是远程数据库中的 table,通过 _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);
    }

我相信您注意到了不同之处 available controller return types。从该文档页面:

ASP.NET Core offers the following options for web API controller action return types:

  • Specific type
  • IActionResult
  • ActionResult<T>

该页面提供了何时使用它们的注意事项。

两者是一样的。默认情况下,如果未指定属性,asp .net 会将操作方法​​视为 HttpGet。 现在既 return 一个列表,但你也应该考虑 return 一个特定的状态代码作为你的 api 的一部分。通过这种方式,客户端应用程序可以了解请求发生了什么

恕我直言,我会为你的 api

采用这种方法
[HttpGet]
 public async Task<IActionResult> Get()
 {
    var titles = await _dataContext.tblTitles.ToListAsync();
    return Ok(titles);
 }

您可以 return 特定类型而不是 IActionResult ,它是通用表示,但只有在需要为您生成文档时才会看到它的优势 api 使用打开 api 标准。像 swashbuckle 这样的包通过反射检查 return 类型以在文档中生成正确的输出模型。希望这有帮助

您的代码段之间有 2 个不同之处,应分别考虑。

1。同步或异步

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

2。纯数据或 IActionResult

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

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


The first one was taken from Visual Studio starter Blazor Wasm App.

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

这使得所选的短格式可以接受,但认为它具有 'demo' 质量水平。