您好,我找到了一个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之间到底有什么区别,根据我的观察,我们通过在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);发布于 2011-05-26 17:35:11
这是非常大的不同。首先,REST通常与以下HTTP动词一起使用:
除了检索项之外,您不应该将GET用于其他任何事情。在整个web开发中,使用HTTP GET修改数据被认为是一种不好的做法。要触发GET,您只需在网页上创建链接或简单地键入浏览器的URL即可。您将点击刷新50次,您有50个相同的插入。数据修改应始终通过POST完成。如果你有触发HTTP POST的表单(Post不能被直接触发),并且你点击了刷新,浏览器通常会询问你是否想要再次提交表单=如果你真的想要将数据再次发布和处理到服务器。
另一个问题是GET请求可以缓存和重定向,但POST请求不能。
发布于 2012-12-19 16:10:57
此链接应提供对所提供答案的进一步洞察:
http://blog.markkoltnuk.com/2011/02/14/understanding-wcf-webinvokewebget-attributes/
让我们一劳永逸地解释一下WebInvoke和WebGet之间的区别。
WebGet (通常用于检索数据)
WebGet属性使用GET谓词公开操作。您可以直接通过Web浏览器访问端点,方法是在地址栏中键入服务的URI。参数可以作为查询字符串参数在URI中发送,也可以嵌入URI中发送。由于其缓存功能,WebGet属性应仅用于数据检索。
WebInvoke (通常用于数据输入/更新) WebInvoke属性使用POST、PUT和DELETE等其他HTTP动词公开服务。POST是默认值,但可以通过设置属性的Method属性来更改它。WebInvoke属性应仅用于数据输入/更新。
发布于 2011-05-26 17:36:10
为了回答您的问题,我建议您了解HTTP协议语义,尤其是HTTP动词,如GET、POST、PUT、DELETE
HTTP GET用于从任何位置检索资源,因此请求不应更改资源的状态。
HTTP POST用于创建内容,有时还用于更新内容,因此在上面的插入方法中使用了HTTP POST。
如果你运行上面的WCF服务,看看这些请求和服务器是如何形成的,你会发现GET没有主体负载,而POST有。在POST的情况下,主体包含需要创建\更新的内容。
https://stackoverflow.com/questions/6136307
复制相似问题