簡體   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