Преимущества WebInvoke POST по сравнению с WEBGET
hi я нашел один из примеров wcf REST с помощью метода WEBINVOKE, как показано ниже:
[OperationContract]
[WebInvoke(
BodyStyle=WebMessageBodyStyle.Bare,
Method="POST",
RequestFormat=WebMessageFormat.Xml,
ResponseFormat=WebMessageFormat.Xml,
UriTemplate="CreateStudent/{StudentName}/{Chair}/{AverageNote}")]
int Insert(string StudentName, string Chair, string AverageNote);
[OperationContract]
[WebGet(
BodyStyle= WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml)]
Student[] GetAllStudents();
Мой вопрос: могу ли я использовать WEBGET-метод вместо WEBINVOKE, как и ниже, и что именно есть разница между WEBINVOKE POST и WEBGET,
в соответствии с моим наблюдением мы отправляем параметры путем добавления строк запроса в шаблонах URI для WEBGet и WebInvoke POST, каковы преимущества, которые мы можем получить с помощью WebInvoke POST, который мы не можем использовать с помощью WEBGET
[OperationContract]
[WebGet(
BodyStyle=WebMessageBodyStyle.Bare,
RequestFormat=WebMessageFormat.Xml,
ResponseFormat=WebMessageFormat.Xml,
UriTemplate="CreateStudent/{StudentName}/{Chair}/{AverageNote}")]
int Insert(string StudentName, string Chair, string AverageNote);
Ответы
Ответ 1
Это очень большая разница. Прежде всего, REST обычно используется с этими HTTP-глаголами:
- GET - получение элементов
- POST - вставка элементов
- PUT - обновление элементов
- DELETE - удаление элементов
Вы никогда не должны использовать GET для чего-либо еще, кроме того, чтобы извлекать элементы. Использование HTTP GET для модификации данных считается плохой практикой для всего веб-разработки. Чтобы запустить GET, вам просто нужно создать ссылку на веб-странице или просто ввести URL-адрес в браузер. Вы получите обновление 50 раз, и у вас будет 50 одинаковых вставок. Изменение данных должно всегда выполняться с помощью POST. Если у вас есть форма, которая запускает HTTP POST (сообщение не может быть вызвано напрямую), и вы нажмете обновление браузера, вы обычно спрашиваете, хотите ли вы снова отправить форму = если вы действительно хотите отправить и обработать данные снова на сервер.
Другая проблема заключается в том, что запрос GET можно кэшировать и перенаправлять, но запросы POST не могут.
Ответ 2
Эта ссылка должна обеспечить дальнейшее понимание предоставленных ответов:
http://blog.markkoltnuk.com/2011/02/14/understanding-wcf-webinvokewebget-attributes/
Давайте раз и навсегда объясним, какая разница между WebInvoke и WebGet.
WebGet (обычно используется для извлечения данных)
Атрибут WebGet предоставляет операции с использованием глагола GET. Вы можете получить доступ к конечной точке напрямую через веб-браузер, введя URI в службу в адресную строку. Параметры могут быть отправлены в URI либо как параметры строки запроса, либо встроены в URI. Атрибут WebGet должен использоваться только для извлечения данных из-за его возможностей кэширования.
WebInvoke (обычно используется для ввода/обновления данных)
Атрибут WebInvoke предоставляет службы, используя другие HTTP-глаголы, такие как POST, PUT и DELETE. POST - значение по умолчанию, но его можно изменить, установив свойство Method для атрибута. Атрибут WebInvoke должен использоваться только для ввода/обновления данных.
Ответ 3
Чтобы ответить на ваш вопрос, я бы посоветовал вам понять семантику протокола HTTP, особенно HTTP-глаголы, такие как GET, POST, PUT, DELETE
HTTP GET выполняется для извлечения ресурса из любого места, и поэтому запрос не должен изменять состояние ресурса.
HTTP POST используется для создания и иногда обновления содержимого и, следовательно, используется в методе Insert выше.
Если вы запустите службу WCF выше и посмотрите, как формируются эти запросы и сервер, вы увидите, что GET не имеет полезной нагрузки тела, тогда как POST имеет. В случае POST тело содержит контент, который необходимо создать\update.