MVC路由试图在虚拟目录上路由

问题描述:

我刚开始一个新的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

不知道这是否适用于其他人,但问题是我的一个骨头代码问题。

我已经将我的Controller分成多个“部分”类,并且在代码转换过程中,它们都没有标记为“public”。

Doh!