Ich versuche, ein WCF/REST-Dienstprojekt in MVC/WebAPI zu konvertieren. Die Service-Schicht wird mehrfach als Wrapper für verschiedene Endsysteme implementiert, und alle Implementierungen beobachten einen allgemeinen Vertrag, der in einer Schnittstelle definiert ist (IContract
). Mit WCF definierten wir [WebInvoke]
und [OperationContract]
Attribute für jede der Methoden, die als Web-Service-Methoden zur Verfügung gestellt wurden. In WebAPI kann dies vereinfacht werden, indem das Attribut-Routing auf dem Controller definiert wird. Ich möchte jedoch die Routenattribute für die Schnittstelle beibehalten, sodass sich alle Implementierungen ähnlich verhalten.WebApi-Attribut-Routing, das auf der Schnittstelle definiert ist
Hier ist ein Beispiel der alten Schnittstelle:
[ServiceContract]
public interface IContract
{
[WebInvoke(UriTemplate = "Version", Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
[OperationContract]
string GetVersion();
}
Hier ist, was ich habe gehofft, zum Laufen zu bringen:
public interface IContract
{
[Route("Version")]
[HttpGet]
string GetVersion();
}
ich auch eine abstrakte Basisklasse zu schaffen, aber diese anderen StackOverflow question Marken in Betracht ziehen würde Ich denke, es gibt keinen geeigneten Ersatz für [WebInvoke(UriTemplate)]
mit WebAPI-Attribut-Routing. Ist das der Fall oder kann mich jemand auf eine ähnliche unterstützte Technik hinweisen?
Dank
Während das ist eine ganz vernünftige Erklärung, die ich mit einigen, ich denke, es ist überraschend, dass WCF REST einen sehr ähnlichen Ansatz durch die Verwendung von '[WebInvoke (UriTemplate)] unterstützt' auf Schnittstellen platziert Attributen. Eine bessere Struktur wäre wahrscheinlich, eine abstrakte Basisklasse mit den Routenattributen zu implementieren, und es sieht so aus, als ob Version 5.2 der Web-API dieses Szenario unterstützen sollte (siehe [diese aktualisierte Antwort] (http://stackoverflow.com/a/19989344/). 44770)) – tbetts42
Ich höre Sie auf der WCF REST, aber ich persönlich fühle, dass es SOLID Prinzipien bricht. Wenn ich die Schnittstelle kenne, um Klassen zu implementieren, vereitelt das den Zweck - zumindest in meinen Augen. – Haney