【问题标题】:Is an api call needed at all for data access with blazor?使用 blazor 进行数据访问是否需要 api 调用?
【发布时间】:2019-02-23 02:10:12
【问题描述】:

所以我在想而不是传统的模式:

  1. 创建服务
  2. 在服务中注入 DBContext
  3. 创建控制器,在控制器中注入服务
  4. 调用控制器方法从剃刀组件访问数据

既然可以直接在razor组件中注入服务,为什么不直接在服务中处理授权呢?

这会导致安全问题吗?

如果通过浏览器调试代码,是否可以提取连接字符串?

【问题讨论】:

    标签: c# .net blazor


    【解决方案1】:

    在 Razor 组件中,有两种执行模式:在客户端浏览器 (Blazor) 和服务器上(以前称为服务器端 Blazor)。当您的应用程序托管在客户端浏览器上时,您目前只能通过 AJAX 访问您的数据库;也就是HttpClient,它要求你创建一个可以访问你的数据库(直接或通过服务和存储库等)并返回所需数据的Web API项目。

    如您所见,尽管前端 Blazor 应用程序在客户端上运行(客户端上的 C#),但您无法直接访问您的数据库,因为您的数据库位于服务器上。身份验证只能并且应该在服务器上使用,并且需要 AJAX 调用。

    当您的应用程序托管在服务器上时(仅限 ASP.NET Core 应用程序),您可以使用 to 方法来访问您的数据库。创建一个查询数据库并将数据直接返回给调用组件应用程序的服务。这是可能的,因为 Components App 项目和托管 ASP.NET Core 应用程序驻留在服务器上。这里不需要 Web API……但是,即使在这种情况下,您也可以创建一个为数据提供服务的 Web API。身份验证和授权应与传统 ASP.NET Core Web 应用程序中的相同。

    ASP.NET 团队表示,从客户端 Blazor 切换到服务器端 Blazor 应该通过修改几行代码来完成。这是部分正确的,并且可能具有误导性。您必须从一开始就根据您期望使用的执行模式来设计您的应用程序。就个人而言,我建议在两种执行模型中都使用 Web API。因此,从一种模式切换到另一种模式可以像 ASP.NET 团队所说的那样简单。同样,如果您创建一个直接访问您的数据库并将数据返回给调用组件应用程序的服务,则您不能在浏览器执行模式下运行此代码,因为数据库在服务器上,而您的服务在客户端“正在运行”。因此,设计您的应用程序并事先了解应该如何以及在何处使用它是非常重要的。我认为应该只在 Intranet 应用程序中使用服务而不是 Web API。

    希望对你有帮助……

    【讨论】:

    • 感谢您的回答。我创建了一个仓库:github.com/Holo00/BergerFlowTrading .
    • 在这种情况下,LoginSubmit 页面被注入,IdentityService 被注入 DbContext。在这种情况下,对数据库的访问似乎是有效的。所以,如果我创建了一个 IQueryable,则由于 DBContext 被注入到客户端中,所以到目前为止,一切都会在客户端执行,一旦我在 IQueryable 上调用 ToList(),查询直接发送到数据库服务器并将结果返回给客户端。对吗?
    • @Jean-Philippe Berger,如果对您有帮助,请将我的回答标记为已接受...您上面的评论实际上是一个新问题,所以请将其移至一个新问题,我会尽快回答。谢谢...
    • 当你使用 Intranet 时,我知道这个词的含义,但是是因为使用应用程序的用户不多,还是你只在这种情况下才推荐它的原因是什么?我目前正在开发将在 VPN 下在公司中使用的应用程序,它只会被 2 或 3 人使用,因此与仅注入一些服务相比,创建所有 API 和所有 DTO 接缝是不必要的开销
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2022-10-03
    • 2010-12-29
    • 1970-01-01
    • 2012-06-27
    • 2018-03-20
    相关资源
    最近更新 更多