我已经对ASP.NET Web API做了大量的研究 – 拥有一个RESTful,基于动词的方法,以及像ASP.NET MVC一样的RPC,传统方法.我想知道最好的方法是什么.到目前为止,我发现有两个有效,但我不确定最佳行动方案是什么.
合理
有一个主要资源,患者,完全适合GET,POST和PUT.
但是我也有一些场景,我有一个控制器有多个动作,没有一个真正适合基于动词的动作,并且通常有多个动作没有任何参数,我可以实现基于路径的约束(例如https://stackoverflow.com/a/14350711/1061602)对于.
方法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 }
);
REF: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 }
);
REF:http://encosia.com/rest-vs-rpc-in-asp-net-web-api-who-cares-it-does-both/
缺点是您在客户端上有效地使用了2个URL,一个用于RESTful操作,一个用于RPC操作.
其他方法??
??
有没有更优雅的方法来实现这一目标?
最佳答案 您是否查看了Web API 2属性路由?你可以继续使用RestApi传统路线来完成你的大多数应用,而且如果你有不适合这个模型的特殊控制器,你可以用属性路径装饰那些控制器.
您可以查看以下WebAPI 2属性路由示例,该示例尝试不同的方案: