我對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」)]裝飾它們, –