问题描述
在我的 blazor webassembly 项目(托管 asp.net 核心)中,我试图创建一个基于策略的授权来进行数据库查找。
问题
- 我应该将这些政策存储在项目解决方案中的什么位置? 共享项目?
- 唯一了解 dbcontext 的项目是 Server 项目。 共享项目没有对服务器项目的引用。所以我正在尝试解决如何访问这个 DbContext 以及 Client 项目 将如何能够为 DbContext 注册依赖注入?
想法
我认为我的策略必须向 apicontroller 发出 http 请求才能获取数据,因此将数据库依赖项注入留在服务器项目中。 这是正确的做法吗?
这里也有人问过类似的问题:
In Blazor,how do I implement client-side authorization checks that need server access?
How can I use resource-based authorization client-side in Blazor?
任何帮助将不胜感激
解决方法
是的,您正确回答了您的问题。将您的 db 上下文保留在 Server 项目中。共享项目对 db 一无所知,它应该保持这样。如果您需要一些数据,请从 Server 项目中的 db 检索它们,将它们转换为 DTO 并将它们作为 API 响应发送给您的客户端(如您所建议的那样)。将您的 DTO 存储在共享项目中。请注意,共享项目中的所有内容都作为客户端项目的一部分发送给用户。
您可以从以下方面获得灵感:https://github.com/CuriousDrive/BlazingChat 或https://github.com/dotnet-presentations/blazor-workshop