2014-01-27 57 views
0

我有2個地區與具有相同的AI控制器名稱2 API控制器,但不同的命名空間,並且通過2個不同的MapHttpRoute(配置)以其獨特的名字和呼叫路由。他們也成功編譯沒有問題。但是,在兩者中都有匹配的操作方法,並且當我撥打一個電話時,我會回到下面的例外。多個API控制器共享同一個命名空間

這是從異常消息明確指出它不支持,而是有一種優雅的分辨率,所以我沒有,儘管在不同的命名空間是唯一的名字我的API控制器?

例外:

多種類型的發現命名 'SomethingApi' 控制器匹配。這可能發生,如果這 請求(「路線一/ API /事/ {行動}」)找到具有相同名稱但不同的命名空間,這是不支持 定義多個控制器 的路線。

路線例如:

public static void RegisterApiRoutes(HttpConfiguration config) 
{ 
    // URL: /route-one/api/something/ 

    config.Routes.MapHttpRoute(
     "RoutOne.Api.Something", 
     "route-one/api/something/{action}", 
     new { controller = "SomethingApi" } 
    ); 
} 

路線在兩個命名空間是從項目的WebApiConfig叫:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     RouteOneAreaRegistration.RegisterApiRoutes(config); 
     RouteTwoAreaRegistration.RegisterApiRoutes(config); 
    } 
} 
+0

你可以同時顯示兩個獨立區域的路線註冊嗎?看起來好像MVC認爲你註冊了兩個區域/路線一樣... – Jason

+0

你在哪裏調用RegisterApiRoutes()? –

+0

您是否試圖爲MapHttpRoute指定區域名稱? – Fals

回答

1

在我看來,像優雅的解決方案在這裏命名您的ApiControllers不同。如果他們不這樣做,請在控制器名稱中反映出來。如果他們做同樣的事情,那麼你不需要單獨的控制器。

另一種解決辦法是有一個控制器的兩個不同的動作,不同的命名的。

這是很難衡量這是爲什麼不給解決你的問題的抽象性問題的一個優雅的方式。也許如果你告訴我們管制員的名字,他們有什麼不同,他們爲什麼在不同的地方,有人可以爲你提供一個更合適的答案。

+0

謝謝,他們做的事情非常相似,只是在公司內的不同業務部門。所以業務單位名稱的差異體現在名稱空間中(並通過MVC區域結構)。其他一切都根據其執行的功能命名。儘管我明白你的觀點。 – Bern

+0

您可以將業務單位名稱或其他ID作爲路由參數/操作方法參數嗎? ' 「API /事/ {行動}/{} businessUnit」'? – danludwig

+0

我喜歡你的想法,但業務部門早些時候被包含在該部分中,事實上,業務部門被MVC領域所反映。它只是在這種情況下發生的,其中兩個在其各自的域上執行非常類似的操作。 – Bern

相關問題