MVC如何計算出我的路由細節,我感到有些莫名其妙。讓我看看我能否解釋這個權利。使用「可選」路由的MVC路由
所以...因爲我有默認路由...
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "CMS", action = "GetPage", id = UrlParameter.Optional }
);
而且我的應用程序是一個內容管理系統,所以我想從網站結構創建漂亮的URL,這樣我就圖個通配符網址,讓我確定我是否需要渲染基於什麼在我的數據庫中的404 ...
routes.MapRoute(
"CMS",
"{*path}",
new { controller = "CMS", action = "GetPage", path = string.Empty }
);
這裏存在的問題。
MVC將基本上將所有內容都匹配到默認路由,因爲從技術上講沒有參數是必需的,假設「CMS」控制器上的「GetPage」不需要參數,這不是我想要的。
我想對它說什麼就像「給定2或3個url部分,找一個控制器和動作匹配一個可選的id參數,但對於所有其他網址,包括你無法匹配的網址此路線落入CMS路線「。
唯一的「輕鬆」的方式,我發現這樣做是對第一條路線改變這樣的事情...
routes.MapRoute(
"Default",
"Get/{controller}/{action}/{id}",
new { controller = "CMS", action = "GetPage", id = UrlParameter.Optional }
);
然後啓動任何URL「GET /」將匹配路徑和所有其他路線會自動落入第二條路線,但這並不代表我腦海中的某個地方,我無法弄清楚爲什麼(我認爲這是因爲它不能真正解決問題,它只是簡單地移動它) 。
我的問題是,我真的不希望,說:「沒有給出值匹配這條路線呢」,所以我改成了這樣的路線......
routes.MapRoute(
"Default",
"{controller}/{action}/{id}"
);
現在的一些奇怪的原因,從字面上每要求是所有的捕獲(不是我想要但接近)。
那麼任何想法傢伙?
編輯:
我來到一個觸摸這個接近...
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { id = UrlParameter.Optional}
);
...但現在匹配與2份「富/欄」的所有網址,而不是像它通過下降應該去其他路線,因爲沒有「富」控制器。
我想說「這裏的可能映射到控制器的url的格式,但是如果您發現控制器不存在與url的第1部分,因爲它的名稱通過默認路由並映射到cms控制器上的getpage「 – War 2013-05-19 10:42:11
我對此問題的回答確實如此解決問題,但它不是一個理想的,因爲我將不得不爲每個控制器創建一個規則來匹配它們。我希望能夠使用更全球化的東西,一個可以做同樣事情的規則,這個解決方案基本上與我的相同,它不會捕獲所有存在的控制器,並且可以通過它們不存在的地方。 – War 2013-05-19 10:45:15