Может ли атрибут 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
обычно обрабатывается.