2012-06-01 53 views
6

我想創建一個自定義路由來處理具有多個參數的特定網址。我已經爲global.asax添加了一個新的路由定義,但是當我嘗試導航到該操作時,我收到錯誤消息「找不到與名爲'Home'的控制器匹配的類型。」ASPNET MVC自定義路由失敗,並顯示「找不到與名爲'Home'的控制器匹配的類型。」

誰能告訴我我哪裏出錯了嗎?

的Global.asax:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapHttpRoute(
     name: "HomeDetails", 
     routeTemplate: "Home/Detail/{articleId}/{articleVersion}", 
     defaults: new { controller = "Home", action = "Detail", articleId = "0", articleVersion = "0.0" } 
); 

    //routes.MapHttpRoute(
    // name: "DefaultApi", 
    // routeTemplate: "api/{controller}/{id}", 
    // defaults: new { id = RouteParameter.Optional } 
    //); 

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

控制器:

public class HomeController : Controller 
{ 

    public ViewResult Index() 
    { 
    return View(); 
    } 

    public ViewResult Detail(int articleId, decimal articleVersion) 
    { 
    // does stuff here... 
    return View(model); 
    } 

} 

我想打會是這樣的http://localhost/home/detail/1234/1.2

回答

21

MapHttpRoute路線到Web API控制器繼承ApiController

在您的例子HomeController的繼承了標準Controller(不ApiController),你需要使用MapRoute而不是爲控制器中發現:

routes.MapRoute(
    name: "HomeDetails", 
    url: "Home/Detail/{articleId}/{articleVersion}", 
    defaults: new { controller = "Home", action = "Detail", articleId = 0, articleVersion = 0.0 } 
); 
+3

衛生署!絕對地發現。謝謝:) – Nick

+2

...這就是爲什麼錯誤信息是作爲一個XML文檔返回... **徘徊感覺有點愚蠢** – Nick

+2

這爲我節省了一天pjumble。我花了最近2天試圖弄清楚發生了什麼。謝謝! –

0

這樣喜代碼更改URL。

routes.MapHttpRoute(
     name: "HomeDetails", 
     routeTemplate: "{controller}/{action}/{articleId}/{articleVersion}", 
     defaults: new { controller = "Home", action = "Detail", articleId = "0", articleVersion = "0.0" } 
); 
相關問題