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

Jea*_*ger 1 .net c# blazor

所以我在思考而不是传统的模型:

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

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

这会导致安全问题吗?

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

Isa*_*aac 7

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

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

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

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

希望这可以帮助...