在过去的几年里,REST一直是如此流行的流行语,当ASP.NET MVC推出时,每个人都将REST与ASP.NET MVC相关联。我也因为缺乏知识而哗然,我对REST的理解仅仅是:
但它更多。而我对REST了解得越多,就越少地将ASP.NET MVC与它联系起来。它比REST更接近WebForms。所以事实上恰恰相反:
且你的默认路由定义为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!
发布于 2018-03-26 08:20:44
没有什么能够阻止你resource/id
在ASP.NET MVC中使用HTTP方法GET / PUT / POST / DELETE。这不是默认的路由设置,但你可以做到这一点。
ASP.NET MVC是一种服务器端技术,允许公开RESTful URL。他们消费的方式并不重要。询问了为什么ASP.NET MVC被认为是RESTFul技术,答案是因为可以轻松地公开RESTFul网站的使用情况,就像那样简单。
https://stackoverflow.com/questions/-100007769
复制相似问题