簡體   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