我对 ASP.NET Web API 做了很多研究——有一个 RESTful、基于动词的方法以及一个 RPC、传统的方法,比如在 ASP.NET MVC 上。我想知道最整洁的方法是什么。到目前为止,我已经找到了两个可行的方法,但我不确定最好的做法是什么。
基本原理
有一个主要资源Patient与 GET、POST 和 PUT 完美匹配。但是,我也有一些场景,其中我有一个具有多个动作的控制器,没有一个真正适合基于动词的动作,并且通常多个动作没有任何参数,我可以实现基于路由的约束(例如https: //stackoverflow.com/a/14350711/1061602)为。
方法一
多条路由,不同的路由名称,相同的路由模板
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()
{
...
}
方法二
多条路由,相同的路由名称,不同的路由模板
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 操作。
其他方法??
??
有没有更优雅的方法来实现这一点?