我在控制器中有一个put和post方法,当它们工作时,它们通常会重定向到get方法。但我注意到在MVC中使用重定向过程要比返回get方法的调用慢。
MS代码示例:
return RedirectToRoute("someRoute", routeVarWithId);
我发现花了更少的时间:
return Get(Id);
由于我的put,post和get,所有返回IHttpActonResult,如果呼叫在我的一个控制器内,我不明白为什么我应该使用重定向,并且安全权限是相同的。
我错过了这里明显的一切吗?
答案 0 :(得分:3)
但我注意到在MVC中使用重定向过程要比返回get方法的调用慢。
当然是;现在有两个请求。
我错过了这里明显的一切吗?
想象一下,我提交了一份表单作为POST
请求从您的网站订购新计算机。它不是将重定向返回到我的订单页面,而是将其呈现出来。然后我的猫跳到键盘上并点击CTRL+R
(刷新)。怎么了?我的浏览器重新提交最后一个请求,即POST
。现在我订购了两台电脑!
相反,在成功处理POST
请求后,您应该返回重定向到订单页面,我的浏览器将使用GET
来获取该订单页面。现在我可以刷新内心的内容,一切都不会发生。
这也使用户能够为页面添加书签或通过电子邮件发送给我的妻子。您无法通过电子邮件发送POST
次请求的链接。
有关该主题的一些轻读,请参阅HTTP/1.1 standard,特别是第9.5节及以下内容:
如果已在源服务器上创建资源,则为响应 应该是201(创建)并包含一个描述该实体的实体 请求的状态,并引用新资源和位置 标题(见第14.30节)。
因此,当POST
创建新资源(如订单)时,它应该返回201 Created
重定向到可以检索新资源(即订单)的URL。