如果你所有的路由與這些城市比刪除默認路由,並與該路由定義代替它:
routes.MapRoute(
"Default",
"{city}",
new { controller = "Location", action = "Index", city = "Mumbai" }
);
然後創建一個LocationController
類:
public class LocationController : Controller
{
public ActionResult Index(string city)
{
// do whatever needed; "city" param has the city specified in URL route
}
}
如果您仍然需要你其他頁面的默認路由(控制器/動作/ ID)不只是城市那麼它可能更好地把約束你的默認路由,並定義它們是這樣的:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "Home|...|..." } // put all controllers here except "Location"
);
routes.MapRoute(
"Location",
"{city}",
new { controller = "Location", action = "Index", city = "Mumbai" }
);
這將使其他控制器仍然工作和位置將工作一樣好。問題當然是如果有一個城市名稱與您的一個常規控制器的名稱相同。 :)但是你也可以控制/避免這種情況。
我按照你的說法試過。但它不工作... – RameshVel
@Ramesh:你是什麼意思,它不工作?你還在使用原始路線定義嗎?你有一個名爲'city'的字符串參數的控制器動作嗎?這絕對有效。你一定在做錯事。 –
@Robert Koritnik,是的,我正在使用原來的定義一起...我正在尋找你的答案。我會改變,如果多數民衆贊成在這個問題... – RameshVel