2009-11-13 36 views
5

我正在使用MVC2 Preview 1的一個非常簡單的應用程序。ASP.NET MVC路由返回404不採取行動

我有一個名爲ContentController的控制器。我的問題是/ Content/Index工作正常,但/ Content /返回404。我在Studio Development Server上運行應用程序。

使用RouteDebugger進行測試,但/ Content /返回404,並且不顯示任何調試信息。

我並沒有改變路由代碼:

 routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 

這是我的控制器:

public class ContentController : Controller 
{ 
    IRepository _repo = new SimpleRepository("db", SimpleRepositoryOptions.RunMigrations); 

    public ActionResult Index() 
    { 
     var content = _repo.GetPaged<Content>(0, 20); 
     return View(content); 
    } 
+0

你在IIS或可視網絡服務器下運行這個嗎?如果IIS,哪個版本?你與/ Content(vs./Content /)有相同的結果嗎? –

+0

嗯......這很奇怪。你能發佈路由調試器輸出的屏幕截圖= –

+0

我在Visual Studio 2008提供的內置web服務器上運行它。 – bq1990

回答

7

這是一個黑暗中的鏡頭,但是你有一個名爲/ Content /的目錄嗎?

+2

賓果!原來,MVC模板創建了一個名爲Content的目錄,放置Site.css文件。現在我覺得自己像一個白癡:(非常感謝大家的幫助! – bq1990

+0

同樣在這裏。但是我的代碼創建了一個與控制器同名的文件夾。 – programad

1

/內容是一個控制器,它基本上是一個動作集合。 ASP.NET MVC需要知道你想運行的WHICH動作,所以通過忽略動作,asp.net mvc不知道要返回什麼動作並給出404。

你可以通過添加默認值路線:

如:

routes.MapRoute("ContentDefault", "Content", new {controller = "Content", action = "Index"}); 

屬性的定義如下:

「ContentDefault`:路由的名稱(必須在你的路由表中是唯一的)

內容:的URL段(嘗試這種更改爲 '內容/大部分/長/ URL',然後去http://localhost/Content/Much/Longer/URL,看看它是如何工作)

新{控制器= ..,行動=。 ..}:爲此路線運行哪個控制器/操作組合。

您也可以覆蓋HandleUnknownAction在你的控制器:

protected override void HandleUnknownAction(string actionName) 
    { 
     return RedirectToAction("index"); 
    } 

哦,順便說一句,一個額外的一塊約路由建議....如果你添加了一些在大括號路線{}這些將被傳遞以行動作爲屬性。

例如/內容/大部分/長/ URL/{PAGE}

所以URL http://localhost/Content/Much/Longer/Url/999

將傳遞999到動作,如在頁面屬性

public ActionResult Index(int Page) { } 

我愛MVC - 永遠不會回來到WebForms - 這是Web開發應該如何!

+0

的結果相同感謝您的信息,這對我正在處理的內容非常具體。 – bq1990