如果这是一个重复,请让我知道 - 因为我有一个快速的样子,找不到任何真正解决我的问题的东西。ASP.NET MVC - 如何创建一个RESTful控制器方案?
我与ASP.NET MVC 2的实验现在从Web窗体背景的人,我才真正处理HTTP GET和HTTP POST。
我想看看我能申请GET/PUT/POST/DELETE到各自CRUD在我的仓库操作(查找,插入,更新,删除)。
说我有一个单独的控制器,具有以下操作方法:
[HttpGet] // GET: /Products/{id}
[ActionName("Products")
public ActionResult Get(int id = 0) { ... }
[HttpPut] // PUT: /Products
[ActionName("Products")
public ActionResult Put(Product product) { ... }
[HttpPost] // POST: /Products/{product}
[ActionName("Products")
public ActionResult Post(Product product) { ... }
[HttpDelete] // DELETE: /Products/{product}
[ActionName("Products")
public ActionResult Delete(Product product) { .. }
夫妇的上的问题 - 是你将如何命名/ action方法分开?我应该通过整个模型(产品),还是只是ID?
我遇到的问题是我不知道如何处理调用这些操作方法与我的视图中的相关HTTP动词。
在这个阶段,我想我会有3浏览:
- “指数” - 结合
IEnumerable<Product>
模型,列出了所有产品,“编辑”,“详细信息”和“删除“链接 - ”单个“ - 绑定到单个
Product
模型,列出产品的所有详细信息,并带有”更新“按钮。 - “新” - 绑定到单一
Product
模型,与创建产品的形式,与“创建”按钮。
所以 - 我的问题是,我如何指定我想调用特定的HTTP动词的特定控制器方法?
使用Html.BeginForm
,您可以指定FormMethod
枚举 - 但它只有GET和POST。
- 如何执行PUT和DELETE命令?
- 我需要为每个HTTP动词分别查看吗?
- 如果我有一个名为“删除”的链接,我可以调用一个HTTP DELETE命令给我的控制器,还是需要重定向到一个新的视图与表单操作删除?
或者,这是一个愚蠢/矫枉过正的设计,我应该坚持“GET”还是“POST”?
我是(相当)新的这种风格的网络开发(REST),所以请亲切。:)
UPDATE
所以我碰到从斯蒂芬·瓦尔特this有趣的文章,关于这个题目。他表示一个HTML表单只支持GET和POST(因为我是REST风格的网页开发的新手,我甚至不知道这一点,对此我感到部分惭愧)。
显然,使用PUT/DELETE调用Controller操作的唯一方法是使用AJAX来完成。真的吗?
那么我应该在这里做什么,我应该坚持GET/POST,还是我应该创建一个JavaScript文件,其中包含基础XmlHttpRequest代码后面的一个很好的功能?
ASP.NET MVC开发人员倾向于哪种方式?当然有人问自己同样的问题。
不知道GET和POST是HTML表单的唯一广泛支持,非常常见,所以不要惊慌,你不知道它:) – eglasius 2010-09-24 06:09:48