2017-10-16 81 views
3

我正在實現一些東西,我希望在更傳統的MVC實現旁邊放置web api。在不同命名空間中使用重複的控制器名稱的路徑模板

的結構是這樣的:

+ Controllers 
    + Web 
    - Product.cs 
    + Api 
    - Product.cs 

在我的代碼,我想路由通過/api進來的Api命名空間的所有請求,以及其他一切的Web命名空間,像:

// Want to indicate that these should all choose the the Api namespace 
routes.MapRoute(
    name: "api_route", 
    template: "api/{controller}/{action}/{id?}"); 

// Indicate that these should all choose the from the Web namespace. 
routes.MapRoute(
    name: "default_route", 
    template: "{controller}/{action}/{id?}"); 

據我所見,沒有慣用的方式來指示哪個命名空間可供選擇。有一個更好的方法嗎?或者我需要手動指定每個控制器的路線?

編輯: 因爲它似乎這可能是一個有爭議的問題,如果使用Razor視圖。無論如何,我會留下來看看是否有人有答案。

回答

0

由於Owin/Katana可能使用app.Map來隔離請求管道。 我使用這兩個啓動配置來處理這些情況:

1)使用Owin Startup文件在/api的主機WebApi。

app.Map("/api", builder => 
{ 
    var config = new HttpConfiguration(); 
    builder.UseWebApi(config); 
}); 

2)從路徑集合中的MVC省略/api(設定在Global.asax中的啓動時間)

RouteTable.Routes.MapMvcAttributeRoutes(); 
RouteTable.Routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home",action = "Index",id = UrlParameter.Optional }); 

// Explicitly tell this route to be solely handled by the Owin pipeline. 
RouteTable.Routes.MapOwinPath("/api"); 
相關問題