嗨,我发现了使用WEBINVOKE方法的wcf REST示例之一,如下所示

[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之间到底有什么区别,
根据我的观察,我们通过将查询字符串附加到WEBGet和WebInvoke POST的URI模板中来发送参数,使用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);

最佳答案

差异很大。首先,REST通常与这些HTTP动词一起使用:

  • GET-检索项目
  • POST-插入项目
  • PUT-更新项目
  • DELETE-删除项目

  • 切勿将GET用于获取项目的其他任何内容。在整个Web开发中,使用HTTP GET进行数据修改被认为是不好的做法。要触发GET,您只需要在网页上创建链接或直接输入浏览器的URL即可。您将刷新50次,并且有50个相同的插入。数据修改应始终通过POST完成。如果您具有触发HTTP POST的表单(无法直接触发发布),并且您单击了刷新,浏览器通常会询问您是否要再次提交表单=您是否真的要再次将数据发布并处理到服务器。

    另一个问题是GET请求可以缓存和重定向,而POST请求不能。

    07-24 09:38
    查看更多