【发布时间】:2019-02-23 02:10:12
【问题描述】:
所以我在想而不是传统的模式:
- 创建服务
- 在服务中注入 DBContext
- 创建控制器,在控制器中注入服务
- 调用控制器方法从剃刀组件访问数据
既然可以直接在razor组件中注入服务,为什么不直接在服务中处理授权呢?
这会导致安全问题吗?
如果通过浏览器调试代码,是否可以提取连接字符串?
【问题讨论】:
所以我在想而不是传统的模式:
既然可以直接在razor组件中注入服务,为什么不直接在服务中处理授权呢?
这会导致安全问题吗?
如果通过浏览器调试代码,是否可以提取连接字符串?
【问题讨论】:
在 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。
希望对你有帮助……
【讨论】: