繁体   English   中英

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

[英]Conventions on having both an API and MVC project in .NET Core solution

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

  • API:旨在表示一个WebAPI(控制器继承了ControllerBase
  • 服务:包含API控制器用来访问数据库等的服务
  • 数据库:它包含常规的数据库存储库,服务层利用这些数据库存储库来访问数据库

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

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

与MVC相比,我认为您对WebAPI有点困惑。

您可以将WebAPI看作是简单的Web服务,它用数据回答http请求(无论数据是什么,它甚至可以包括javascript或资产)。

编辑:因此,发送“ UI”信息无疑是您的API和Service项目的一部分。

在API上,您将需要创建专用的控制器以发送回“ UI”部分。 在服务上,您将需要创建专用服务以获取“ UI”信息(使用资源,在Cloud上获取数据等多种方式)。

EDIT2:但是没有什么可以阻止您为UI部件创建完全不同的解决方案。 如果再次选择WebAPI,则仍然需要强制执行前面提到的API /服务逻辑。 您可以选择自己喜欢的方式。

如何通过.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都将能够共享相同的身份验证机制,而无需紧密耦合。

您的问题的答案主要是“取决于您的口味”,但我认为...

除非您打算将API公开给其他应用程序,否则将API控制器保留在承载MVC控制器(或Razor Page)的同一应用程序中。 当我同时拥有MVC控制器和API控制器时,我将它们放在单独的文件夹中。 我认为可以,因为您的控制器应该很薄。 我通常将所有业务逻辑(包括任何必要的数据访问权限)放在单独的类库中构建的服务中。

仅在实际需要时添加API。

您打算将任何内容公开给另一个应用程序吗?

如果您只需要一个与数据库交互的UI,那么就不用打扰了,使用服务检索数据,从MVC控制器中调用它们,然后完全跳过API部分。

对于这种有限的用例,您不需要API。 API引入了许多其他要考虑的因素,例如身份验证和安全性。 不需要时不要使事情复杂化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM