Asp.net mvc 如何使用HTTP方法路由真正的CRUD RESTful API

Asp.net mvc 如何使用HTTP方法路由真正的CRUD RESTful API,asp.net-mvc,rest,asp.net-mvc-4,asp.net-mvc-routing,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

我正在使用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) {}
将一个URL路由到这些不同操作方法的最佳方式是什么

我遇到了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 }
        );
还有更好的办法吗

因此,像mysite.com/Widget/1这样的URL可以指向以下三种操作方法之一:

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

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

[HttpGet]
public JSONResult Get(int widgetId) {}
默认情况下,
mysite.com/Widget/1
这样的调用将转到

[HttpGet]
public JSONResult Get(int widgetId) {}
除非另外指定,否则如果进行ajax调用,可以使用
TYPE
属性指定。例如:
TYPE:DELETE

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

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

示例:

要调用
publicjsonresult更新(int-widgetId){}
,请使用

$.ajax({
    url: mysite.com/Widget/1,
    type: "UPDATE",
    success: function (result) {},
    error: function () {}
});
$.ajax({
    url: mysite.com/Widget/1,
    type: "GET",
    success: function (result) {},
    error: function () {}
});
$.ajax({
    url: mysite.com/Widget/1,
    type: "DELETE",
    success: function (result) {},
    error: function () {}
});
要调用
publicjsonresult Get(int-widgetId){}
,请使用

$.ajax({
    url: mysite.com/Widget/1,
    type: "UPDATE",
    success: function (result) {},
    error: function () {}
});
$.ajax({
    url: mysite.com/Widget/1,
    type: "GET",
    success: function (result) {},
    error: function () {}
});
$.ajax({
    url: mysite.com/Widget/1,
    type: "DELETE",
    success: function (result) {},
    error: function () {}
});
要调用
publicjsonresult Delete(int-widgetId){}
,请使用

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

Yasser,我不是在使用WebAPI,只是一个Asp.NET MVC 4 Web应用程序。据我所知,两者之间存在差异。你的答案也适用于普通的MVC 4应用程序吗?或者换句话说,我的控制器类不是从APIController派生的,而是从controller派生的。视频中的教程没有使用HTTP方法:)他只是有不同的操作方法,称为Create、Delete、Get、Update。