ASP.NETMVC有什么好处?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

在过去的几年里,REST一直是如此流行的流行语,当ASP.NET MVC推出时,每个人都将REST与ASP.NET MVC相关联。我也因为缺乏知识而哗然,我对REST的理解仅仅是:

REST = SEO /用户友好的网址

但它更多。而我对REST了解得越多,就越少地将ASP.NET MVC与它联系起来。它比REST更接近WebForms。所以事实上恰恰相反:

REST≠SEO /用户友好的URL

且你的默认路由定义为controller/action/id绝对不能RESTful的。

让我用这个理解来解释我的问题。

如果ASP.NET MVC是RESTful,我们不会将默认路由定义为:

controller/action/id

反而

resources/id  /* that would have to use HTTP methods GET/PUT/POST/DELETE */

所以,而不是(也提供HTTP方法与请求路径):

/product/index/1  /* GET */
/product/create   /* POST */
/product/delete/1 /* POST */
/product/update/1 /* POST */

它应该是(这里也提供了HTTP方法)

/products/1  /* GET */
/products    /* POST */
/products/1  /* DELETE */
/products/1  /* PUT */

现在这将是RESTful。好事是这实际上是可能的。如果有需要,使其充分的RESTful这也意味着你必须使用Ajax,因为PUT和DELETE方法不能只用浏览器的请求完成(这并不完全正确1)。所以现代Ajax应用程序实际上可以完全RESTful。

Ajax是客户端技术,与ASP.NET MVC没有任何关系。事实是,ASP.NET MVC可以作为完全REST风格的应用程序来完成。实现它的手段(Ajax)并不重要。(感谢Darin Dimitrov)

主要问题

为什么我们将ASP.NET MVC视为一个RESTful框架,特别是将它的URL路由关联到它?为什么他们没有定义默认的URL路由来执行 RESTfulness?我不是在寻找争论的答案,而是那些真正回答这个问题的人 - 这种关系是如何进入生活的......也许我还不够聪明,仍然认为这是因为缺乏对两者的认识。

实际上,不必使用Ajax来实现完全RESTful架构。Asp.net MVC支持(自版本2以来)HTTP方法重写,这意味着可以使用浏览器表单发出PUT或DELETE方法。你所要做的就是添加一个额外的隐藏字段,如:

<input type="hidden" name="X-HTTP-Method-Override" value="DELETE" />

Asp.net MVC框架将能够将这样的POST请求理解为一个DELETE请求,并且HttpDeleteAttribute动作方法选择器也将它理解为一个删除请求。HTTP方法覆盖FTW!

提问于
用户回答回答于

没有什么能够阻止你resource/id在ASP.NET MVC中使用HTTP方法GET / PUT / POST / DELETE。这不是默认的路由设置,但你可以做到这一点。

ASP.NET MVC是一种服务器端技术,允许公开RESTful URL。他们消费的方式并不重要。询问了为什么ASP.NET MVC被认为是RESTFul技术,答案是因为可以轻松地公开RESTFul网站的使用情况,就像那样简单。

用户回答回答于

我认为很多讨论都与MVC之前的.NET Web堆栈的非RESTful有关,以及MVC使它在.NET平台上构建RESTful应用程序比ASP.NET MVC具有的任何特定RESTful功能容易多少。

扫码关注云+社区