假设我有一层抽象控制器,它将请求委托给它的子控制器类,直到实现为止。
认为它像控制器的管道,该请求必须经过,并且包括高速缓存的响应,授权和验证所述用户,验证所述输入和输出数据,处理信息库访问等
我的叶类(层次结构的最后一个孩子)可能具有以下签名:
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扩展方法。或者你可以尝试internal
由beautifulcoder的建议。如果它在另一个程序集中(并且您可以对其进行修改),则也可以使用InternalsVisibleToAttribute使它对其他程序可见。
虽然说实话,用另一个控制器中的一个控制器似乎没有我的权利。我会尝试将您的常用功能重构为服务/帮助程序,然后您也可以将EpisodesController
变成一个简单的服务。在组成继承和所有:)
关于c# - 使 Controller 对ASP.NET WEB API(或MVC)中的客户端不可见,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27505685/