使用Asp.net MVC web.api为什么要重定向而不是只调用其他函数?

时间:2014-08-01 19:28:46

标签: c# asp.net-mvc-4 asp.net-web-api asp.net-web-api-routing

我在控制器中有一个put和post方法,当它们工作时,它们通常会重定向到get方法。但我注意到在MVC中使用重定向过程要比返回get方法的调用慢。

MS代码示例:

return RedirectToRoute("someRoute", routeVarWithId);

我发现花了更少的时间:

return Get(Id);

由于我的put,post和get,所有返回IHttpActonResult,如果呼叫在我的一个控制器内,我不明白为什么我应该使用重定向,并且安全权限是相同的。

我错过了这里明显的一切吗?

1 个答案:

答案 0 :(得分:3)

  

但我注意到在MVC中使用重定向过程要比返回get方法的调用慢。

当然是;现在有两个请求。

  

我错过了这里明显的一切吗?

想象一下,我提交了一份表单作为POST请求从您的网站订购新计算机。它不是将重定向返回到我的订单页面,而是将其呈现出来。然后我的猫跳到键盘上并点击CTRL+R(刷新)。怎么了?我的浏览器重新提交最后一个请求,即POST。现在我订购了两台电脑!

相反,在成功处理POST请求后,您应该返回重定向到订单页面,我的浏览器将使用GET来获取该订单页面。现在我可以刷新内心的内容,一切都不会发生。

这也使用户能够为页面添加书签或通过电子邮件发送给我的妻子。您无法通过电子邮件发送POST次请求的链接。

有关该主题的一些轻读,请参阅HTTP/1.1 standard,特别是第9.5节及以下内容:

  

如果已在源服务器上创建资源,则为响应   应该是201(创建)并包含一个描述该实体的实体   请求的状态,并引用新资源和位置   标题(见第14.30节)。

因此,当POST创建新资源(如订单)时,它应该返回201 Created重定向到可以检索新资源(即订单)的URL。