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

我有一个由以下项目构成的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或社区建议的约定/文档说明如何构建此类项目?

参考方案

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

ASP.NET Core Singleton实例与瞬态实例的性能 - c#

在ASP.NET Core依赖注入中,我只是想知道注册Singleton实例是否会比注册Transient实例更好地提高性能?在我看来,对于Singleton实例,创建新对象和相关对象只需花费一次时间。对于Transient实例,此成本将针对每个服务请求重复。因此Singleton似乎更好。但是,在Singleton上使用Transient时,我们可以获得多…

ASP.NET Core-在Singleton注入上存储库依赖项注入失败 - c#

我正在使用SoapCore为我的ASP.NET Core MVC应用程序创建Web服务。我正在使用Entity Framework Core和简单的存储库模式来获取我的数据库数据。我通过Startup.cs中的.AddSingleton()注入存储库类:services.AddSingleton<IImportRepository, ImportRep…

ASP.NET Web API 2中AuthorizeAttribute发生了什么变化? - c#

我已经将项目和一组单元测试从ASP.NET Web API升级到ASP.NET Web API 2。我们将自定义DelegatingHandler用于自定义身份验证机制。它将Thread.CurrentPrincipal和HttpContext.Current.User设置为适当的System.Security.Claims.ClaimsPrincipal。…

如何在多台服务器中发布Web API Net Core 3.0 - c#

我有一个带有.net core 3.0的Web API,并且我想同时在10台服务器(使用Windows Server)中发布,我可以使用哪种工具来实现?您是否曾经做过类似的任务? 参考方案 这个问题有多个答案,我将尝试解释这些概念,然后由您决定。发布命令dotnet publish - IIS-您可以使用它来创建部署包,即需要放在IIS上的文件夹(如果这是您…

ddl在服务器中未更新-asp.net - javascript

我在ASP.NET c#上工作。我有一个DropDownList。 (runat =“ server”)在$ {document).ready上,我更新了它的值:$(document).ready(function () { document.getElementById("ddl").value = "abc"; ……