使用 blazor 访问数据是否需要 api 调用?

Is an api call needed at all for data access with blazor?

所以我在考虑而不是传统模式:

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

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

这会导致安全问题吗?

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

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

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

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

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

希望这对您有所帮助...