Asp.Net WebApi2隐藏控制器动作

时间:2014-10-09 11:50:39

标签: c# entity-framework asp.net-web-api

我有一个基本控制器:

public abstract class EntityController<T> : BaseController
{
    public EntityController(ILogService logService) : base(logService) { }

    [HttpGet]
    public abstract IEnumerable<T> Get();

    [HttpGet]
    public abstract T Get(int id);

    [HttpPost]
    [ValidateModel]
    public abstract IHttpActionResult Create(T dto);

    [HttpPut]
    [ValidateModel]
    public abstract IHttpActionResult Update(T dto);

    [HttpDelete]
    public abstract IHttpActionResult Delete(int id);
}

在继承此类的大多数控制器上,一切正常。但是,我有几个控制器,我想隐藏&#39; Get()动作。

是否可以在操作级别执行此操作,还是应该抛出MethodNotFound异常?

另外,上述所有操作的最佳做​​法是返回IHttpActionResult而不是IEnumerable和T?

1 个答案:

答案 0 :(得分:1)

这个没有任何实现的基类没有意义。你为什么需要它?如果您需要抽象某些行为,则最好使用界面。使用界面可以提供更大的灵活性。您甚至可以定义和实现不同的接口。

如果存在所有继承类共享的公共实现,则使用此类基类是有意义的。在这种特殊情况下,您具有T类型参数,这可以允许您实现和共享通用实现。这会使这个课更有用。如果您这样做,则应将方法声明为虚拟,以便您有机会更改特殊情况的实现,否则使用基本实现。

关于返回IHttpActionResult或特定类型或集合,当您实施Web API时,它非常自然,信息量更大。因此,您应该将返回类型更改为特定类型(例如TT的集合),这是有意义的。

你甚至可以结合接口和base clase(带有一些实现)的想法。如果这样做,您可以拥有一个具有所有功能的基类,以及一组接口,这些接口允许您仅公开所需的功能。