c# - 使用 Asp.net MVC web.api 为什么我应该重定向而不是仅仅调用其他函数?

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

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

MS 代码示例:

return RedirectToRoute("someRoute", routeVarWithId);

我发现花费更少的时间:

return Get(Id);

由于我的 put、post 和 get 都返回 IHttpActonResult,如果调用在我的一个 Controller 内并且安全权限相同,我不明白为什么我应该使用重定向。

我在这里遗漏了什么明显的东西吗?

最佳答案

But I noticed that using the redirect process in MVC is slower than just returning the call of the get method.

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

Am I missing anything obvious here?

假设我提交一个表单作为 POST 请求,以从您的网站订购一台新计算机。它没有将重定向返回到我的订单页面,而是将其呈现出来。然后我的猫跳到键盘上并按下 CTRL+R(刷新)。会发生什么?我的浏览器重新提交最后一个请求,即 POST。现在我已经订购了两台电脑!

相反,在成功处理 POST 请求后,您应该返回一个重定向到订单页面,我的浏览器将使用 GET 获取该页面。现在我可以尽情享受,再也不会有任何不好的事情发生。

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

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

If a resource has been created on the origin server, the response SHOULD be 201 (Created) and contain an entity which describes the status of the request and refers to the new resource, and a Location header (see section 14.30).

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

关于c# - 使用 Asp.net MVC web.api 为什么我应该重定向而不是仅仅调用其他函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25087357/

相关文章:

c# - 如何验证 asp.net 中的数字?

c# - 在Unity的另一个类中从Dictionary接收值

c# - MVC 4 [ _Layout.cshtml ] - 在页面脚本开始之前添加所有脚本文件

c# - 如果在代码优先模式下使用,使用数据库优先和模型优先开发的 T4 模板生成的代码可能无法正常工作

c# - 未在 Azure 包中创建 Web.config

AngularJs Web 服务用户帐户

c# - 从集合中收集数据时,我应该使用简单的 foreach 还是 Linq

c# - Android 和 iOS 上的 UWP

dependency-injection - ASP.Net Web API DependencyResolver - 试图解决许多我不关心的内部依赖关系的框架?

javascript - 将对象从 Ajax 传递到 C# WebApi