我試圖將WCF/REST服務項目轉換爲MVC/WebAPI。服務層多次作爲不同終端系統的包裝實現,並且所有實現遵守界面中定義的通用契約(IContract
)。在WCF中,我們定義了作爲Web服務方法公開的每種方法的[WebInvoke]
和[OperationContract]
屬性。在WebAPI中,這可以通過在控制器上定義的屬性路由來簡化。但是,我想保留接口上定義的路由屬性,因此所有實現的行爲都相似。界面
這裏的老界面的樣本:
[ServiceContract]
public interface IContract
{
[WebInvoke(UriTemplate = "Version", Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
[OperationContract]
string GetVersion();
}
這是我希望得到的工作:
public interface IContract
{
[Route("Version")]
[HttpGet]
string GetVersion();
}
我也會考慮創建一個抽象基類,但這其他StackOverflow question品牌我認爲沒有合適的替代[WebInvoke(UriTemplate)]
使用WebAPI屬性路由。是這種情況,還是有人可以指點我一個類似的支持技術?
感謝
雖然這是我同意一個完全合理的解釋,我想這是令人驚訝的是WCF REST支持的一個非常類似的方法通過使用'[WebInvoke(UriTemplate)]'放置在接口屬性。更好的結構可能是使用路由屬性實現抽象基類,並且它看起來像Web API的5.2版本應該支持這種情況(請參閱[更新的答案](http://stackoverflow.com/a/19989344/) 44770)) – tbetts42
我在WCF REST上聽到你的聲音,但我個人覺得它打破了SOLID原則。讓界面知道如何實現類實現了目的 - 至少在我眼中。 – Haney