我開始開發一個支持Web API 2的應用程序,因爲我只是想以REST方式檢索數據。區分web api路由和mvc路由
然後我需要添加一些HTML到網站,以便管理員管理提供的信息,所以我創建了一些控制器來返回HTML。現在我想區分Web API路由和MVC路由,而不會影響正在生產的Web API路由(如果可能)。
的Web API路線:我錯在這裏被刪除時,我首先開發這個「API」的前綴,這將解決衝突現在
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}/{id}",
defaults:
new {
controller = "Parking",
action = "Get",
id = RouteParameter.Optional
}
);
}
MVC路由:默認路由。 MVC控制器名稱是管理,也就是MVC路由用於管理網站只
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Parking", action = "Get", id = UrlParameter.Optional }
);
}
的問題是,MVC路線沒有機會匹配,因爲的WebAPI路線首先匹配。只要他們只是工作,MVC路由如何改變並不重要,因爲它們尚未投入生產;對我來說,現在保持Web API路由更好。
我已經試過:
- 開關在Global.asax.cs中
- 網頁API路線的登記和MVC路線的順序使用「網絡」爲前綴的MVC控制器,但路由機制認爲「網絡」是一個控制器,它沒有找到(Web API路由再次獲勝)。
- 我無法想出適當的約束來避免這種衝突。
- 硬編碼「管理」替換了MVC路由模式中的「{controller}」。
這裏有一些技巧來解決碰撞?
然後做反web api通常會做什麼。 web api通常會在mvc之前註冊'api'前綴和映射以避免衝突。爲mvc註冊前綴並將其映射到web api路由之前。你甚至可以嘗試使用屬性路由的mvc和設置前綴有 – Nkosi
我試過了,它不起作用(請參閱問題中的嘗試列表) – Luis