我使用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 }
);
有没有更好的方法?
答案 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 () {}
});