带有Identity Server 4的MVC Core和MVC Core API

时间:2017-10-16 14:13:54

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

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

我目前正在编写IDS的快速入门示例,并使用此处的文档here

使用API​​和MVC客户端实现了IDS

我试图了解使用带有API的MVC客户端的体系结构,其中只有API会引用DbContext?

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

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

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

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

相比

或者我这样做错了吗?

1 个答案:

答案 0 :(得分: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等。这是一个大量的抽象,以保证使用第三方库。