2012-04-08 7 views
2

Stimmt es, dass das WebInvoke-Attribut GET als Methode verwenden kann? Ich kann keine Ahnung davon in Microsoft-Dokumentation sehen. Ich habe es aber in einigen Foren-Beispielen gesehen.Kann das WCF-WebInvoke-Attribut GET als Methode verwenden

Im Prinzip sollte es nicht so sein, dass Sie mit webInvoke posten, posten und löschen können. Bei Verwendung von WebGet hingegen können Sie nur das GET-Verb über HTTP verwenden, dh Sie können nicht posten, löschen und setzen. Nun sollten Get-Operationen Daten nicht verändern, sie sollten laut W3org idempotent sein und aus diesem Grund keine Option im WebInvoke-Attribut sein. Kann jemand auf die Rolle oder Existenz des GET-Verbs in WebInvoke-Attributen hinweisen, insbesondere im Kontext der REST-Programmierung?

Antwort

4

WebInvoke ist ein allgemeines Attribut für jedes HTTP-Verb einschließlich GET. Wenn Sie es mit GET verwenden, müssen Sie alle Einschränkungen von GET befolgen - Operationsparameter müssen einfache Typen sein, die URI-Pfadargumenten zugeordnet sind.

WebGet nur für GET Verb ist und IMHO besteht es hauptsächlich den Unterschied zwischen GET und anderen Verben zu zeigen (GET idempotent werden soll, wird nicht Körper, etc.)

Die wichtigste Methode. NET diese Attribute verwendet, ist interne GetWebMethod:

internal static string GetWebMethod(OperationDescription od) 
{ 
    WebGetAttribute wga = od.Behaviors.Find<WebGetAttribute>(); 
    WebInvokeAttribute wia = od.Behaviors.Find<WebInvokeAttribute>(); 
    EnsureOk(wga, wia, od); 
    if (wga != null) 
    { 
     return "GET"; 
    } 
    if (wia == null) 
    { 
     return "POST"; 
    } 
    return (wia.Method ?? "POST"); 
} 

Wie Sie Methode für WebInvoke GET sehen kann, ist normal verarbeitet.

+0

Perfekt. Vielen Dank und vor allem für den erklärenden Code. Wenn also WebInvoke und WebGet mit anderen Worten verwendet werden, gehen WebInvoke und WebGet zu einer Dispatch-Routine, in der die Attribute untersucht werden (Attribute hier sind 'Get' oder 'Post'), und das Ergebnis dieser Untersuchung ist entscheidend für die weitere Interpretation von der Befehl". GetWebMethod ist dann eine Art Framework-interner Filter. Wo können wir GetWebMethod sehen? Ich schätze, indem ich die Klassenhierarchie serviceModel studiere. – netfed

+1

'GetWebMethod' ist eine interne Methode in WCF - Sie werden es mit einem Tool wie Reflector finden. –