我对ASP.NET Web API做了大量的研究 - 有一个基于动态的REST风格的方法,以及像ASP.NET MVC一样的RPC传统方法。我想知道最新的方法是什么。到目前为止,我发现了两项工作,但我不确定最佳的行动方案是什么。WebApi - REST和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/
坏处是,你再有客户端,一个REST风格的动作,一个RPC行动所使用的有效的2个网址。
其他方法?
?? ??
有没有更优雅的方法来实现这一目标?
这看起来像一个真正的有益补充,谢谢,我会看看! –
由于这个问题有不少观点,AttributeRouting确实是一条路。用你的主RESTful架构设置你的主路由,然后如果你有其他人只用[Route(“api/whatever”)]装饰它们, –