2017-10-16 159 views
0

我有几个项目在MVC5中完成,我正在使用IdentityServer 4升级到Dot Net Core。每个项目都有一个API,通过它与Android和iOS客户端连接。 API和MVC在同一个项目中。MVC核心和MVC核心API与Identity Server 4

我目前通过IDS的快速启动样品工作,并实施了用API和使用文档MVC客户IDS这里找到docs.identityserver.io

我试图让我的头使用MVC客户端的架构围绕只有API可以引用DbContext的API?

API和MVC客户端应该在同一个项目中还是在两个独立的项目中?

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

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

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

或者我在谈论这一切都是错误的?

回答

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映射到/从JSON等等。这是一个重要的抽象的数量,以保证使用第三方库。

+0

谢谢你的回答。你证实了我认为会是更好的方式来做到这一点。我也认为把事情分开是一条路。感谢您提供Refit的链接...我不知道它存在。改造只是很棒的imo,如果我可以做一些类似于eas的实现HttpClient,那么为什么不呢。我现在有一些重构要做。 – pjdupreez