【发布时间】:2014-12-16 13:23:39
【问题描述】:
假设我有一个抽象控制器层,它将请求委托给它的子控制器类,直到它到达实现。
把它想象成一个控制器管道,请求必须通过,包括缓存响应、授权和验证用户、验证输入和输出数据、处理存储库访问等。
我的 leaf 类(层次结构的最后一个子级),可能具有以下签名:
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 的类名更改为另一个名称,因为它实际上是一个控制器,而是一个内部控制器。
【问题讨论】:
-
如果你想防止动作被调用,为什么不让它们不公开呢?或者如果它们必须是公开的,也许可以试试这样:stackoverflow.com/questions/4390541/…
-
如果它是私有的,为什么它需要成为控制器?
标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api