2012-04-08 67 views
2

WebInvoke屬性是否可以將GET作爲方法?在Microsoft文檔中我看不到這個概念。不過,我已經看到它在一些論壇示例中使用。WCF WebInvoke屬性可以採用GET作爲方法

原則上,不應該如此,當使用webInvoke時,您可以發佈,放置和刪除。相比之下,當使用WebGet時,您只能通過HTTP使用GET動詞,這意味着您不能發佈,刪除和放置。現在Get-operations不應該修改數據,它們應該根據W3org是冪等的,並且因此不是WebInvoke屬性中的一個選項。有人能夠指出GET動詞在WebInvoke屬性中的作用或存在,特別是在REST編程的上下文中。

回答

4

WebInvoke是包括GET的任何HTTP動詞的通用屬性。如果通過GET使用它,則必須遵循所有GET的限制 - 操作參數必須是映射到URI路徑參數的簡單類型。

WebGet僅僅是GET動詞,恕我直言,它的存在主要是爲了顯示GET和其他動詞的區別(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"); 
} 

正如你可以看到GET爲WebInvoke方法正常處理。

+0

完美。非常感謝,尤其是解釋代碼。因此,換句話說,當使用WebInvoke和WebGet時,WebInvoke和WebGet會進入一個調度例程,其中檢查屬性(這裏的屬性是'get'或'post'),而且這個檢查的結果對於進一步解釋命令」。 GetWebMethod是一種框架內部過濾器。我們在哪裏可以看到GetWebMethod?我想通過研究serviceModel類層次結構。 – netfed 2012-04-14 07:49:11

+1

'GetWebMethod'是WCF內部的方法 - 你可以用Reflector等工具找到它。 – 2012-04-15 21:18:53

相關問題