Asp.net mvc 如何使用HTTP方法路由真正的CRUD RESTful API
我正在使用Asp.NET MVC 4控制器(而不是WebAPI)实现一个真正的RESTful API,其中单个URL需要根据HTTP方法类型指向不同的操作方法 因此,像mysite.com/Widget/1这样的URL可以指向以下三种操作方法之一: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
[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。