簡體   English   中英

使控制器對ASP.NET WEB API(或MVC)中的客戶端不可見

[英]Making a controller not visible to the client in ASP.NET WEB API (or MVC)

假設我有一層抽象控制器,它將請求委托給其子控制器類,直到實現為止。

認為它就像是控制器的管道,請求必須經過,並且包括緩存響應,授權和驗證用戶,驗證輸入和輸出數據,處理存儲庫訪問等。

我的類(層次結構的最后一個孩子)可能具有以下簽名:

public class SeasonsController : DefaultPersistenceRestController
                                 <int, Season, SeasonPutDTO, SeasonPostDTO, SeasonQueryData> {
      /** Controller implementation here  **/
}

基類在一個模塊中有很多可重用的代碼,這很好,並且在全局范圍內更改控制器的邏輯時對我有很大幫助。

現在,假設SeasonsController出於不相關的原因需要調用EpisodesController

調用將是這樣的:

EpisodesController episodeController = new EpisodesController();
//Do something with EpisodesController

問題是我不希望從外部訪問EpisodesController ,例如客戶的請求。 ASP.NET自動識別控制器並為它們創建一個公共端點,例如http://localhost:80/episodes

我創建了EpisodesController是因為它使用了控制器基類中的大量邏輯,但是我打算在內部使用它。

如果以這種方式使用控制器,我可以取消激活身份驗證,授權,緩存和所有其他無用的東西,所以這不是問題。

但是,我無法防止ASP.NET忽略我的EpisodesController類,也不能將其視為控制器。

是否存在可以告訴編譯器執行此操作的屬性或注釋? 也許在Web.config中進行一些修改?

還要注意,我不想將EpisodesController的類名更改為另一個名稱,因為它實際上是一個控制器,但是是一個內部控制器。

您可以嘗試使用IgnoreRoute擴展方法。 或者,您也可以按照beautifulcoder的建議嘗試internal 如果它在另一個程序集中(並且您可以對其進行修改),則還可以使用InternalsVisibleToAttribute使它對其他程序可見。

雖然說實話,但在我看來,在另一個控制器中使用一個控制器似乎不合適。 我會嘗試將您的常用功能重構為服務/助手,那么您可能還可以將EpisodesController變成一個簡單的服務。 繼承和其他方面的組成:)

如果將控制器public ,則可以訪問它。 據我了解,您可以將其更改為protectedinternal

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM