Подтвердить что ты не робот

Преимущества 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);
4b9b3361

Ответ 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.