如何使用HTTP方法路由True CRUD RESTful API

时间:2012-11-05 05:14:47

标签: asp.net-mvc rest asp.net-mvc-4 asp.net-mvc-routing

我使用Asp.NET MVC 4控制器(不是WebAPI)来实现真正的RESTful API,其中单个URL需要指向基于HTTP方法类型的不同操作方法。

因此,诸如mysite.com/Widget/1之类的URL可以转到以下三种操作方法之一:

[HttpPut]
public JSONResult Update(int widgetId) {}

[HttpDelete]
public JSONResult Delete(int widgetId) {}

[HttpGet]
public JSONResult Get(int widgetId) {}

将一个网址路由到这些不同的操作方法的最佳方法是什么?

我遇到了 ActionName 过滤器,我可以为每个操作方法设置相同的过滤器。然后,我的RouteConfig类将始终指向相同的ActionName,MVC将根据HTTP方法类型属性选择正确的操作方法。

[HttpPut]
[ActionName("CRUD")]
public JSONResult Update(int widgetId) {}

[HttpDelete]
[ActionName("CRUD")]
public JSONResult Delete(int widgetId) {}

[HttpGet]
[ActionName("CRUD")]
public JSONResult Get(int widgetId) {}

routes.MapRoute(
       name: "Default",
       url: "{controller}/{action}/{id}",
       defaults: new { controller = "Widget", action = "CRUD", id = UrlParameter.Optional }
        );

有没有更好的方法?

1 个答案:

答案 0 :(得分:1)

  

因此,诸如mysite.com/Widget/1之类的URL可以转到以下三种操作方法之一:

默认情况下,mysite.com/Widget/1之类的通话会转到

[HttpGet]
public JSONResult Get(int widgetId) {}

除非您另行指定,否则如果您正在进行ajax调用,则可以使用TYPE属性指定此项。例如:TYPE:DELETE

  

将一个网址路由到这些不同的操作方法的最佳方法是什么?

我个人认为您不需要指定[HttpPut]\Delete\Get[ActionName("CRUD")]属性。在您的用例中,只需使用TYPE属性即可有效地实现所有操作。

示例:

要拨打public JSONResult Update(int widgetId) {},请使用

$.ajax({
    url: mysite.com/Widget/1,
    type: "UPDATE",
    success: function (result) {},
    error: function () {}
});

要拨打public JSONResult Get(int widgetId) {},请使用

$.ajax({
    url: mysite.com/Widget/1,
    type: "GET",
    success: function (result) {},
    error: function () {}
});

要拨打public JSONResult Delete(int widgetId) {},请使用

$.ajax({
    url: mysite.com/Widget/1,
    type: "DELETE",
    success: function (result) {},
    error: function () {}
});

Must Read

相关问题