2013-12-22 69 views
1

這是我第一次在ASP.Net Mvc上處理路由,我試圖做一些像StackOverflow一樣的問題。使用簡單的自定義路由

我有我叫News控制器,它富人他的行動像News/News/CreateNews/Edit/1等我想補充的,而不是電網這個自定義路由News/1,將返回的消息本身的可視化,默認指數News/節目。

這是我的路線:

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

routes.MapRoute(
    name: "ViewNews", 
    url: "{controller}/News/{newsId}", 
    defaults: new { controller = "News", action = "Index" }, 
    constraints: new { newsId = @"\d+" } 
); 

首當其衝是默認路由,第二個是我試過了,下面this post。但它只是給我這個錯誤(在此網址News/1):

'/'應用程序中的服務器錯誤。

無法找到該資源。

我想知道我做錯了什麼,一旦它甚至沒有達到行動。如果我嘗試News/它很好。

我與我的行動做到了這一點:

public ActionResult Index(int? id) 
{ 
    if (id != null) 
    { 
     var news = _newsService.GetView((int)id); 

     if (news != null) 
     { 
      return View("News", news); 
     } 
     else 
     { 
      return RedirectToAction("Index", "Home"); 
     } 
    } 

    return View(); 
} 

這將是很好,如果有人能告訴怎麼做,像這樣:News/1/news-title-here

回答

2

這是因爲News/匹配默認路由。

你可能在尋找這樣的:

routes.MapRoute(
    name: "ViewNews", 
    url: "News/{newsId}", 
    defaults: new { controller = "News", action = "Index" }, 
    constraints: new { newsId = @"\d+" } 
); 

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

請注意,你應該把最重要的途徑首先是因爲它會按順序進行處理。此路線將匹配任何以News開頭的url,並根據您的約束生成newsId並將其路由到News控制器的Index操作。

附註:{newsId}是指動作中同名的參數。所以你設置你的指數應該是這樣的:

public class NewsController : Controller 
{ 
    public ActionResult Index(int newsId) 
    { 
    } 
} 

如果你願意接受像News/1/news-title-here你可以使用以下的路徑,一個虛擬參數:

routes.MapRoute(
    name: "ViewNews", 
    url: "News/{newsId}/{customTitle}", 
    defaults: new { controller = "News", action = "Index", 
        customTitle = UrlParameter.Optional }, 
    constraints: new { newsId = @"\d+" } 
); 
+0

好了,我沒想到這將有所作爲。我會盡力。 – DontVoteMeDown

+0

是的,我意識到我應該將action參數更改爲'newsId'。它工作的兄弟,謝謝。 – DontVoteMeDown

+0

@DontVoteMeDown沒問題,很高興能幫到你。 – Silvermind