Может ли атрибут WCF WebInvoke принимать GET в качестве метода

Правда ли, что атрибут WebInvoke может принимать GET как метод? Я не вижу никакого представления об этом в документации Microsoft. Я видел это в некоторых примерах на форуме.

В принципе, не должно быть так, что при использовании webInvoke вы можете публиковать, размещать и удалять. При использовании WebGet, напротив, вы можете использовать только глагол GET через HTTP, что означает, что вы не можете Post, Delete и Put. Теперь Get-операции не должны изменять данные, в соответствии с W3org они должны быть идемпотентными и по этой причине не должны быть опцией в атрибуте WebInvoke. Может кто-то указать на роль или существование глагола GET в атрибутах WebInvoke, особенно в контексте программирования REST.

1 ответ

Решение

WebInvoke является общим атрибутом для любого HTTP-глагола, включая GET. Если вы используете его с GET, вы должны соблюдать все ограничения GET - параметры операции должны быть простыми типами, сопоставленными с аргументами пути URI.

WebGet предназначен только для глагола GET и IMHO он существует в основном для того, чтобы показать разницу между 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 обычно обрабатывается.

Другие вопросы по тегам