2016-08-03 17 views
3

Ich bin Neuling zu ServiceStack. Von der wiki hat die Dienstklasse die Any, Get..etc HTTP Verb-Funktionen, um das DTO-Objekt abzurufen. Der DTO routing kann das HTTP-Verb auf das Routing beschränken. Wie funktionieren diese Dienst- und DTO-Routings zusammen? ODER sind diese beiden HTTP-Verb-Limits sehr ähnlich?HTTP-Verb bei ServiceStack Service und bei DTO-Routing

beispiel, wenn der Dienst nur die Get-Funktion hat, aber die DTO hat die Put Grenze, bedeutet es keine Routing Übereinstimmen?

public class HelloService : Service 
{ 
    public object Get(Hello request) 
    { 
     return new HelloResponse { Result = "Hello, " + request.Name }; 
    } 
} 

[Route("/hello/{Name}", "PUT")] 
public class Hello 
{ 
    public string Name { get; set; } 
} 

Wo finde ich weitere Informationen über diese finden?

Danke,

Antwort

1

Ihr individuelles Routing und Zugang Service-Implementierung entkoppelt sind. Das Routing legt fest, welche benutzerdefinierten Routen verwendet werden können, um Ihren Service anzurufen, während Ihre Service-Implementierung definiert, welche Anforderungen Ihr Service verarbeiten kann.

Hinweis: Ihre Leistungen nicht darauf beschränkt und kann außerhalb Ihrer routen genannt werden, z.B. wenn Pre-defined Routes, oder Messaging, Service Gateway usw.

So definieren Sie Ihre Routen defintions was Benutzerdefinierte Routen es ermöglicht, wobei gilt:

[Route("/hello/{Name}", "PUT")] 

Nur eine PUT Anfrage übereinstimmt mit /hello starten, zB:

PUT /hello/foo 

Aber wenn jemand macht ein PUT /hello/foo Antrag ServiceStack eine Nicht implementiert Exception werfen, weil es in der Lage sein würde nicht eine Methode zu finden DURCHFÜHRU ntation, die diesen Antrag, die für eine PUT-Anforderung verarbeiten kann muss entweder:

public object Put(Hello request) { ... } 

Oder die Any() Rückfall, die den Antrag auf ANY HTTP Verben umgehen kann:

public object Any(Hello request) { ... } 

Sofern Sie mehrere haben Implementierungen für die gleiche Anfrage DTO, würde ich empfehlen, bei der Umsetzung Ihrer Dienste mit Any() zu bleiben, zB:

Auf diese Weise können Ihre benutzerdefinierten Routen einschränken, welche Routen zulässig sind, und wenn eine Anforderung mit ihr übereinstimmt, wird die am besten passende Implementierung oder das beste Fallback für die Implementierung Any() aufgerufen.