【问题标题】:MVC Core and MVC Core API with Identity Server 4带有 Identity Server 4 的 MVC Core 和 MVC Core API
【发布时间】:2017-10-16 14:13:54
【问题描述】:

我在 MVC5 中完成了几个项目,我正在考虑使用 IdentityServer 4“升级”到 Dot Net Core。每个项目都有一个 API,Android 和 iOS 客户端通过该 API 连接。 API 和 MVC 在同一个项目中。

我目前正在研究 IDS 的快速入门示例,并使用此处的文档 docs.identityserver.io 实现了 IDS 以及 API 和 MVC 客户端

我试图了解将 MVC 客户端与 API 一起使用的架构,其中只有 API 会引用 DbContext?

API 和 MVC 客户端应该在同一个项目中还是在 2 个不同的项目中?

我还假设要检索并保存到数据库的数据应该仅由 API 管理?如果我现在看到 MVC 客户端与 Android/iOS 客户端类似,那么有两个使用实体框架(API 和 MVC)的地方没有意义?

我还假设 Razor 视图可以比创建新视图更容易迁移到 DotNet 核心?

但是有两组控制器,一组用于 API,一组用于 MVC。然后 MVC 将使用 HttpClient(或 RestSharp?)连接到 API。这看起来像是一种非常臃肿的方法,我必须在我的 MVC 控制器的操作中进行 API 调用。与使用 ApplicationDbContext 相比?

还是说我做错了?

【问题讨论】:

    标签: asp.net-web-api asp.net-core-mvc identityserver4


    【解决方案1】:

    这完全取决于您。您可以让 MVC 项目成为 API 项目的客户端,或者您可以简单地让两个项目使用相同的底层数据层。就个人而言,我倾向于选择后者。本质上,您只需创建一个实现服务层的 .NET Standard 2.0 类库。这个类库将与您的数据库 (DbContext) 交互,并为您的 MVC/API 需要进行的调用抽象逻辑。然后,两个项目都可以简单地引用这个类库,并使用您的服务层来完成他们需要做的事情。

    如果您想将 MVC 项目用作客户端,那么,是的,您只需使用 HttpClient 向您的 API 发出请求。 RestSharp 只是HttpClient 的模拟,所以你可以根据需要使用它。就个人而言,我不喜欢使用第三方库,除非它们提供了显着的抽象级别或平台无法提供的其他好处,我认为 RestSharp 不会这样做。可以说通过 RestSharp 做一些事情比HttpClient 更容易,但并非如此。任何老开发人员都可以进来并使用 HttpClient 处理您的代码,但您需要特别熟悉 RestSharp 的人来处理 RestSharp 代码。就像我说的,有时这是一个值得的权衡,但这最终是你需要决定的。但是,您可能会考虑使用像 Refit 这样的库,它可以让您创建一个接口来模拟您的 API 并轻松进行 API 调用,而无需处理低级 HttpClient 调用或到/从 JSON 的映射等. 这是保证使用第三方库的大量抽象。

    【讨论】:

    • 感谢您的回答。你证实了我认为更好的方法。我也认为把事情分开是要走的路。感谢您提供 Refit 的链接...我不知道它存在。 Retrofit 简直太棒了 imo,如果我可以做一些类似于 eas HttpClient 的实现的事情,那为什么不呢。我现在有一些重构要做。
    猜你喜欢
    • 2019-04-09
    • 2017-10-26
    • 2020-09-25
    • 2021-01-22
    • 2017-06-10
    • 1970-01-01
    • 2020-03-25
    • 2019-11-02
    • 1970-01-01
    相关资源
    最近更新 更多