的Web API控制器選擇我有一個包含同名控制器兩種不同的類庫。按航線
namespace OldApiService{
public class GreetingController: ApiController{
public string Get(){ return "hello from old api"; }
}
}
namespace NewApiService{
public class GreetingController: ApiController{
public string Get(){ return "hello from new api"; }
}
}
而且我有一個主要We Api applciation包含路由和其他輔助類。本申請參考NewApiService
和OldApiService
組件。
namespace MyApi {
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{api}/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
}
}
我想選擇一個指定url參數的控制器。
http://localhost:4035/api/old/greeting
將使用OldApiService控制器
http://localhost:4035/api/new/greeting
將使用NewApiService控制器
我試圖改變URL路由設置,但沒有奏效。發生重複的控制器錯誤。
有什麼辦法來覆蓋控制器選擇機制。簡單地說,我將得到路由值(舊的或新的)並從指定的命名空間中選擇控制器。
多種類型的發現名爲「問候」控制器匹配。 如果服務該請求 (「API/{版本}/{控制器}/{ID}」)中得到的多個控制器的路由定義 具有相同名稱但不同的命名空間,其中不支持此可能發生。 爲「問候」的請求已發現以下的匹配 控制器:OldApiService.GreetingController NewApiService.GreetingController
我認爲這是asp.net網頁API的一個重要問題。
如果你有兩個庫的控制考慮使用屬性的路由作爲總會有一個通過基於約定的路由衝突ks在控制名稱映射路由時。 – Nkosi
您是否嘗試過使用RoutePrefix屬性? – peinearydevelopment
是的,我嘗試過路由屬性,但沒有工作 – barteloma