假设我有一层抽象控制器,它将请求委托给它的子控制器类,直到实现为止。
认为它就像是控制器的管道,请求必须经过,并且包括缓存响应,授权和验证用户,验证输入和输出数据,处理存储库访问等。
我的叶类(层次结构的最后一个孩子)可能具有以下签名:
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
成为简单的服务。继承和其他方面的组成:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句