2013-10-25 44 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」)]裝飾它們, –