MVC Core 和 MVC Core API with Identity Server 4
MVC Core and MVC Core API with Identity Server 4
我在 MVC5 中完成了几个项目,我正在查看 'upgrading' 到带有 IdentityServer 4 的 Dot Net Core。每个项目都有一个 API,通过它 Android 和 iOS 客户端连接。 API 和 MVC 在同一个项目中。
我目前正在研究 IDS 的快速入门示例,并使用此处的文档 API 和 MVC 客户端实现了 IDS docs.identityserver.io
我正在努力了解将 MVC 客户端与 API 一起使用的架构,其中只有 API 会引用 DbContext?
API 和 MVC 客户端应该在同一个项目中还是在 2 个不同的项目中?
我还假设要检索并保存到数据库的数据应该仅由 API 管理?如果我现在看到 MVC 客户端与 Android/iOS 客户端类似,那么在两个地方使用 Entity Framework(API 和 MVC)就没有意义了吗?
我还假设 Razor 视图可以比创建新视图更容易迁移到 DotNet 核心?
但是有 2 套控制器,一套用于 API,一套用于 MVC。然后,MVC 将使用 HttpClient(或 RestSharp?)连接到 API。这种接缝就像一种非常臃肿的方法,我必须在我的 MVC 控制器的操作中进行 API 调用。与使用 ApplicationDbContext 相比?
还是我做错了?
这完全取决于你。您可以让 MVC 项目成为 API 项目的客户端,或者您可以简单地让两个项目使用相同的底层数据层。就我个人而言,我倾向于选择后者。本质上,您只需创建一个实现服务层的 .NET Standard 2.0 class 库。这个 class 库将与您的数据库 (DbContext
) 交互,并抽象化您的 MVC/API 需要进行的调用的逻辑。然后,两个项目都可以简单地引用这个 class 库,并使用您的服务层来完成他们需要做的事情。
如果您想将 MVC 项目用作客户端,那么,是的,您只需使用 HttpClient
向您的 API 发出请求。 RestSharp 只是 HttpClient
的模拟,因此您可以根据需要使用它。就个人而言,我不喜欢使用第三方库,除非它们提供了重要的抽象级别或平台无法提供的其他好处,我认为 RestSharp 不会这样做。通过 RestSharp 做一些事情可能比 HttpClient
更容易,但不是那么明显。任何老开发人员都可以使用 HttpClient
来处理您的代码,但您需要特别熟悉 RestSharp 的人来处理 RestSharp 代码。就像我说的,有时这是值得的权衡,但这最终是您需要决定的事情。但是,您可能会考虑像 Refit 这样的库,它让您创建一个接口来模拟您的 API 并轻松地进行 API 调用,而无需处理低级 HttpClient
调用或映射 to/from JSON 等。这是保证使用第三方库的大量抽象。
我在 MVC5 中完成了几个项目,我正在查看 'upgrading' 到带有 IdentityServer 4 的 Dot Net Core。每个项目都有一个 API,通过它 Android 和 iOS 客户端连接。 API 和 MVC 在同一个项目中。
我目前正在研究 IDS 的快速入门示例,并使用此处的文档 API 和 MVC 客户端实现了 IDS docs.identityserver.io
我正在努力了解将 MVC 客户端与 API 一起使用的架构,其中只有 API 会引用 DbContext?
API 和 MVC 客户端应该在同一个项目中还是在 2 个不同的项目中?
我还假设要检索并保存到数据库的数据应该仅由 API 管理?如果我现在看到 MVC 客户端与 Android/iOS 客户端类似,那么在两个地方使用 Entity Framework(API 和 MVC)就没有意义了吗?
我还假设 Razor 视图可以比创建新视图更容易迁移到 DotNet 核心?
但是有 2 套控制器,一套用于 API,一套用于 MVC。然后,MVC 将使用 HttpClient(或 RestSharp?)连接到 API。这种接缝就像一种非常臃肿的方法,我必须在我的 MVC 控制器的操作中进行 API 调用。与使用 ApplicationDbContext 相比?
还是我做错了?
这完全取决于你。您可以让 MVC 项目成为 API 项目的客户端,或者您可以简单地让两个项目使用相同的底层数据层。就我个人而言,我倾向于选择后者。本质上,您只需创建一个实现服务层的 .NET Standard 2.0 class 库。这个 class 库将与您的数据库 (DbContext
) 交互,并抽象化您的 MVC/API 需要进行的调用的逻辑。然后,两个项目都可以简单地引用这个 class 库,并使用您的服务层来完成他们需要做的事情。
如果您想将 MVC 项目用作客户端,那么,是的,您只需使用 HttpClient
向您的 API 发出请求。 RestSharp 只是 HttpClient
的模拟,因此您可以根据需要使用它。就个人而言,我不喜欢使用第三方库,除非它们提供了重要的抽象级别或平台无法提供的其他好处,我认为 RestSharp 不会这样做。通过 RestSharp 做一些事情可能比 HttpClient
更容易,但不是那么明显。任何老开发人员都可以使用 HttpClient
来处理您的代码,但您需要特别熟悉 RestSharp 的人来处理 RestSharp 代码。就像我说的,有时这是值得的权衡,但这最终是您需要决定的事情。但是,您可能会考虑像 Refit 这样的库,它让您创建一个接口来模拟您的 API 并轻松地进行 API 调用,而无需处理低级 HttpClient
调用或映射 to/from JSON 等。这是保证使用第三方库的大量抽象。