【问题标题】:Returning data from a WEB API in a Blazor App从 Blazor 应用程序中的 WEB API 返回数据
【发布时间】:2020-11-22 11:10:25
【问题描述】:

考虑以下两段代码。两者都将数据返回到 Web API Get 调用。两者都返回一个项目列表。两者都有效。第一个取自 Visual Studio 初学者 Blazor Wasm App。第二个取自在线教程。 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);
    }

【问题讨论】:

    标签: c# blazor webapi


    【解决方案1】:

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

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

    • 具体类型
    • IActionResult
    • ActionResult&lt;T&gt;

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

    【讨论】:

      【解决方案2】:

      你的sn-ps有2个不同,应该分开考虑。

      1。同步或异步

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

      2。纯数据或 IActionResult

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

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


      第一个取自 Visual Studio starter Blazor Wasm App。

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

      这使得选择的短格式可以接受,但认为它是“演示”质量水平。

      【讨论】:

      • 是的。我的意思是我从应用程序中获取了 IEnumerable 返回方法。 _datacontext 是我自己的,不在 MS 应用程序中。感谢您指出。
      【解决方案3】:

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

      恕我直言,我将为您的 api 采用这种方法

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-06
        • 2016-07-02
        • 2011-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-11
        • 1970-01-01
        相关资源
        最近更新 更多