是否需要api调用才能使用blazor进行数据访问?

问题描述 投票:1回答:1

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

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

由于您可以直接在剃刀组件中注入服务,为什么不直接在服务中处理授权?

这会导致安全问题吗?

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

c# .net blazor
1个回答
4
投票

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

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

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

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

希望这可以帮助...

© www.soinside.com 2019 - 2024. All rights reserved.