繁体   English   中英

Asp.Net WebApi2隐藏控制器动作

[英]Asp.Net WebApi2 hiding controller action

我有一个基本控制器:

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);
}

在继承此类的大多数控制器上,一切正常。 但是,我有几个控制器要“隐藏” Get()操作。

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

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

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

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

对于返回IHttpActionResult或特定类型或集合,当您实现Web API时,这是自然而然的,并且提供的信息也更多。 所以,你应该改变返回类型为特定类型(例如T或集合T ),它是有道理的。

您甚至可以将接口和基本类(具有某些实现)的概念结合起来。 如果这样做,则可以拥有具有所有功能的基类和一组接口,这将使您仅公开所需的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM