【发布时间】:2013-11-04 12:35:17
【问题描述】:
我对 ASP.NET Web API 做了很多研究——有一个 RESTful、基于动词的方法以及一个 RPC、传统的方法,比如在 ASP.NET MVC 上。我想知道最整洁的方法是什么。到目前为止,我已经找到了两个可行的方法,但我不确定最好的做法是什么。
基本原理
有一个主要资源,Patient,它与 GET、POST 和 PUT 完美匹配。 然而我也有一些场景,我有一个控制器有多个动作,没有一个真正适合基于动词的动作,而且经常有多个动作没有任何参数,我可以实现基于路由的约束(例如@987654321 @) 为。
方法 1
多条路线,不同路线名称,相同路线模板
WebApiConfig 路由:
config.Routes.MapHttpRoute(
name: "RestApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "RpcApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
参考号:https://stackoverflow.com/a/12367487/1061602
缺点,必须在每个动作中添加ActionName属性,否则不起作用(??):
[ActionName("RestApi")]
public object Get(string id)
{
...
}
[ActionName("RpcApi")]
public void Foo()
{
...
}
方法 2
多条路线,同一路线名称,不同路线模板
WebApiConfig 路由:
config.Routes.MapHttpRoute(
name: "RestApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "RpcApi",
routeTemplate: "rpc/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
参考号:http://encosia.com/rest-vs-rpc-in-asp-net-web-api-who-cares-it-does-both/
缺点是您在客户端上有效地使用了 2 个 URL,一个用于 RESTful 操作,一个用于 RPC 操作。
其他方法??
??
有没有更优雅的方法来实现这一点?
【问题讨论】:
标签: rest asp.net-web-api asp.net-routing