2013-10-25 41 views
4

我对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个网址。

其他方法?

?? ??

有没有更优雅的方法来实现这一目标?

回答

2

你看过Web API 2属性路由吗?您可以继续使用大多数应用程序的RestApi传统路线,并且无论您有哪些特殊控制器不适合该模型,您都可以用属性路线装饰这些控制器。

你可以看看下面的WebAPI 2属性的路由样品它尝试不同的方案:

http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/WebApiAttributeRoutingSample/Readme.txt

+0

这看起来像一个真正的有益补充,谢谢,我会看看! –

+1

由于这个问题有不少观点,AttributeRouting确实是一条路。用你的主RESTful架构设置你的主路由,然后如果你有其他人只用[Route(“api/whatever”)]装饰它们, –