在 .NET Core 解决方案中同时拥有 API 和 MVC 项目的约定

glo*_*ter 10 c# asp.net asp.net-mvc asp.net-web-api asp.net-core

我有一个由以下项目构成的 ASP.NET Core (.NET Core 2.2) 应用程序:

  • API:这意味着代表一个 WebAPI(控制器继承ControllerBase
  • 服务:这包含 API 控制器用来访问数据库等的服务
  • 数据库:这包含常用的数据库存储库,服务层利用它来访问数据库

现在,我想添加一个与 API 对话的 UI(MVC 部分 pre-.NET-core)。这是如何通过 .NET Core 实现的,其中 MVC 和 WebAPI 是一回事?MVC 控制器/模型/视图应该是 API 的一部分吗?它应该是一个监听不同端口的新项目吗?身份验证如何适用于两者(例如,API 通常具有一些基于令牌的身份验证,UI 应用程序通常具有用户名/密码身份验证)?WebAPI 和 MVC 部分是否应该像 ASP.NET Identity 一样共享相同的身份验证?如果他们使用相同的数据库,那不会将两者紧密结合吗?

是否有某种 Microsoft 或社区建议的约定/文档来说明如何构建此类项目?

pri*_*sar 12

这是如何通过 .NET Core 实现的,其中 MVC 和 WebAPI 是一回事?

在 dotnet 核心 MVC 和 WebAPI 可以存在于同一个项目中。一切应用程序就像一个控制台应用程序。您可以将 MVC 服务添加到启动类中,使其成为 MVC 应用程序。

MVC 控制器/模型/视图应该是 API 的一部分吗?

最好为 MVC 和 WebAPI 相关功能分别设置不同的控制器,同时将它们保存在同一文件夹中。

模型 - 它们可以重用于 mvc 和 webapi。视图模型和 DTO 也是如此。

视图 - 仅用于 MVC,webapi 不需要视图。

它应该是一个监听不同端口的新项目吗?

是的,您可以为 webapi 和 MVC 创建不同的项目。

身份验证如何适用于两者(例如,API 通常具有一些基于令牌的身份验证,UI 应用程序通常具有用户名/密码身份验证)?

如果您使用基于令牌的身份验证,那么 Web API 和 MVC 都可以使用。

WebAPI 和 MVC 部分是否应该像 ASP.NET Identity 一样共享相同的身份验证?如果他们使用相同的数据库,那不会将两者紧密结合吗?

如果您将 ASP.Net Identity 与身份服务器一起使用,那么 MVC 和 webapi 将能够共享相同的身份验证机制,而不会紧密耦合。