与WEBGET相比,WebInvoke POST的优点

ven*_*kat 28 rest wcf

您好我发现了一个带有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();
Run Code Online (Sandbox Code Playgroud)

我的问题是,我可以使用WEBGET方法而不是WEBINVOKE,就像下面的WEBINVOKE POST和WEBGET之间的差别一样,根据我的观察,我们通过在WEAPGet和WebInvoke POST的URI模板中附加查询字符串来发送参数,使用WEBGET我们无法获得的WebInvoke POST有什么优势

[OperationContract]
[WebGet(
BodyStyle=WebMessageBodyStyle.Bare, 
RequestFormat=WebMessageFormat.Xml,
ResponseFormat=WebMessageFormat.Xml,
UriTemplate="CreateStudent/{StudentName}/{Chair}/{AverageNote}")]
int Insert(string StudentName, string Chair, string AverageNote);
Run Code Online (Sandbox Code Playgroud)

Lad*_*nka 48

这是非常大的差异.首先,REST通常与这些HTTP谓词一起使用:

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

除了检索项目之外,你不应该使用GET.使用HTTP GET进行数据修改被认为是整个Web开发中的一种不好的做法.要触发GET,您只需在网页上创建链接或只需键入浏览器的URL即可.您将刷新50次,并且您有50次相同的插入.应始终使用POST完成数据修改.如果您有触发HTTP POST的表单(Post不能直接触发),并且您点击刷新浏览器通常会询问您是否希望再次提交表单=如果您确实要将数据再次发布并处理到服务器.

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


ram*_*moh 5

此链接应提供对所提供答案的进一步了解:

http://blog.markkoltnuk.com/2011/02/14/understanding-wcf-webinvokewebget-attributes/

让我们一劳永逸地解释WebInvoke和WebGet之间的区别.

WebGet(常用于检索数据)

WebGet属性使用GET动词公开操作.您可以通过在地址栏中键入服务的URI直接通过Web浏览器访问端点.参数可以作为查询字符串参数在URI中发送,也可以嵌入URI中.由于其缓存功能,WebGet属性仅应用于数据检索.

WebInvoke(通常用于数据输入/更新)WebInvoke属性使用其他HTTP谓词(如POST,PUT和DELETE)公开服务.POST是默认值,但可以通过设置属性的Method属性来更改它.WebInvoke属性应仅用于数据输入/更新.