2013-04-05 76 views
1

我有一個正常的,默認路由和幾個控制器的網站。我想分發可鏈接回家/索引操作的「短網址」鏈接。例如,我可以做如何在ASP.NET MVC中混合使用短URL和常規URL?

  • /mysite的 - 帶您到首頁/指數爲默認
  • /mysite的/ SomeController/SomeAction - 帶您到指定的控制器/動作爲默認

但我也想這樣做:

/MySite/SomeID - 帶你到主頁/索引與ID參數提供。

我可以添加一個「shortUrl」路由並分發一個url,比如「/ MySite/ShortUrl/SomeID」,但是有沒有其他方法可以像上面那樣使用「id-only」url?

回答

0

你有做這樣的事情了,問題是,以下將被明確:

/MySite/SomeID 
/MySite/SomeController 

你怎麼希望能夠在兩者之間進行區分?如果你不介意的話,第二個是不可能的(即你是幸福總是指定動作時指定控制器),你可以嘗試這樣的事:

routes.MapRoute(
    "ShortUrl", 
    "{id}", 
    new { controller = "Home", action = "Index", id = Url.OptionalParameter } 
); 

routes.MapRoute(
    "Default",            
    "{controller}/{action}/{id}",       
    new { controller = "Home", action = "Index", id = Url.OptionalParameter } 
); 

請求然後/MySite/SomeID應該帶你到相同的動作如MySite/Home/Index/SomeID

如果您需要能夠指定要麼和ID或控制器(默認動作),你可以不喜歡以下(也使用上述路由):

public class HomeController : Controller 
{ 
    public ActionResult Index(string id) 
    { 
     // If the ID represents something, show that something. 
     if (IdMatchesSomeResource(id)) 
     { 
      // Do something 
      return View(); 
     } 
     // Otherwise, treat it as a request for a controller. 
     else 
     { 
      return RedirectToAction("Index", id); 
     } 
    } 
}