4

この質問はすでに私が求めていることを尋ねていますが、答えを明確にしたいと思います。

答えは、WebGetWebInvokeは似ており、主な違いはMethodパラメーターであると述べています。

しかし、Methodパラメータが に設定されて"GET"いる場合、実際には機能的に同等ですか、それとも他の違いはありますか?

4

2 に答える 2

2

それらは単なるマーカー属性であり、最終的には機能的に 100% 同等になります。これらの属性を解釈する唯一のものはWebHttpBehavior::GetWebMethodメソッドであり、その機能は単純です:

internal static string GetWebMethod(OperationDescription od)
{
    WebGetAttribute webGetAttribute = od.Behaviors.Find<WebGetAttribute>();
    WebInvokeAttribute webInvokeAttribute = od.Behaviors.Find<WebInvokeAttribute>();
    WebHttpBehavior.EnsureOk(webGetAttribute, webInvokeAttribute, od);
    if (webGetAttribute != null)
    {
        return "GET";
    }
    if (webInvokeAttribute == null)
    {
        return "POST";
    }
    return webInvokeAttribute.Method ?? "POST";
}
于 2014-12-31T17:55:50.053 に答える
0

そうではない。

thisおよび thisサンプルに基づいて MessageFormatter を使用して、WCF DataContractJsonSerializer を Newtonsoft JsonSerializer に置き換えるために数時間を費やしました

WebGet(難しい方法で) と の使用に違いがあることがわかりましたWebInvoke(Method="GET")

WebInvokeリクエストは WCF スタックの別のパイプラインを通過し、予想されるメッセージを逆シリアル化しようとします (メソッドがIDispatchMessageFormatter.DeserializeRequest()呼び出されます) WebGet

得られた教訓:運用WebGetへの使用GET

于 2017-03-29T16:09:11.977 に答える