2016-03-23 90 views
1

我剛開始一個新的C#MVC程序。我有很多這些工作,但這一個沒有,我不明白爲什麼。MVC路由試圖在虛擬目錄上路由

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

    routes.MapRoute(
     name: "Default", 
     url: "{action}", 
     defaults: new { controller = "Account", action = "LogOn" } 
    ); 

} 

它給我這個錯誤:

System.Web.HttpException (0x80004005): The controller for path '/VIRTUALDIRECTORY' was not found or does not implement IController. 
    at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) 
    at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) 
    at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) 
    at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

就像我的其他網站,這是通過視覺工作室虛擬目錄設置。具體來說,我把它設置爲「不要打開一個頁面」,「本地IIS」,只有一個典型的URL:http://localhost/VIRTUALDIRECTORY

我點擊創建和它做了,有VIRTUALDIRECTORY在IIS中(至少似乎)與我的其他虛擬目錄相同。

與其他程序相比,唯一的區別是我本質上是複製一個VB.NET MVC程序到C#。所以我創建了一個空的C#MVC程序,然後複製並轉換類。有(顯然)沒有編譯錯誤,但我敢肯定有一個設置或我沒有想出這是造成這種情況。

是否有其他人知道如何解決這個問題?

我正在通過nuget引用最新的MVC(5.2.3)。

+0

可能不是你的問題,但「默認」路線處理所有額外的兩件事。另外,由於「默認」路線是第一個,所以其他兩個路線從來都不會發揮作用。 –

+0

雅,我只是想讓它工作,所以我加了其他2. –

+0

克里斯是對的。您的路由配置錯誤。應該從最具體到最不具體的路線排列路線。在這種情況下,最具體的路由是'DefaultAccount'。另外兩條路線目前有衝突。您可以通過以下方式使它們更具體:1)在URL中已提供默認值的情況下,使其成爲必需2)添加約束以僅在某些情況下匹配3)將文字添加到您的URL以便它們只匹配在某些情況下。請參閱:[ASP.NET路由](https://msdn.microsoft.com/en-us/library/cc668201.aspx)。 – NightOwl888

回答

0

不知道這是否適用於其他人,但問題是我的一個骨頭代碼問題。

我已經將我的Controller分成多個「部分」類,並且在代碼轉換過程中,它們都沒有標記爲「public」。

Doh!