2012-04-08 6 views
2

WebInvoke属性がGETをメソッドとして受け取ることは可能ですか?私はMicrosoftのドキュメントでこれの考えを見ることはできません。私はそれがいくつかのフォーラムの例で使用されているのを見ました。WCF WebInvoke属性がメソッドとしてGETを取ることができます

webInvokeを使用すると、投稿、貼り付け、および削除ができるようにするのが原則です。対照的にWebGetを使用する場合は、GET verbをHTTP経由でしか使用できません。つまり、Post、Delete、Putはできません。 Get操作ではデータを変更すべきではありません。W3orgによれば、冪等でなければならず、そのためWebInvoke属性のオプションではありません。誰かが、WebInvoke属性のGET動詞の役割や存在、特にRESTプログラミングのコンテキストを指摘できますか?

答えて

4

WebInvokeは、GETを含むすべてのHTTP動詞の一般的な属性です。それをGETと共に使用する場合は、GETのすべての制限に従わなければなりません。操作パラメータは、URIパス引数にマップされた単純な型でなければなりません。 (など、冪等する必要があるGET、ボディを持っていないGET)

WebGetはちょうどGET動詞のためのものであり、私見それはGETと他の動詞との違いを示すために、ほとんど存在

で最も重要な方法。これらの属性を使用してNETは、内部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"); 
} 

あなたがWebInvokeのためのGETメソッドが正常に処理されて見ることができるように。

+0

パーフェクト。ありがとう、特に説明コードのためにありがとう。言い換えれば、WebInvokeとWebGetを使用する場合、WebInvokeとWebGetは、属性が調べられる(ここでの属性は 'get'または 'post'です)、ディスパッチルーチンに行きます。この検査の結果は、コマンド"。 GetWebMethodは一種のフレームワーク内部フィルタです。どこでGetWebMethodを見ることができますか?私は、serviceModelクラス階層を勉強していると思います。 – netfed

+1

'GetWebMethod'はWCF内の内部メソッドです - あなたはReflectorのようなツールでそれを見つけるでしょう。 –

関連する問題