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)。
答
不知道这是否适用于其他人,但问题是我的一个骨头代码问题。
我已经将我的Controller分成多个“部分”类,并且在代码转换过程中,它们都没有标记为“public”。
Doh!
可能不是你的问题,但“默认”路线处理所有额外的两件事。另外,由于“默认”路线是第一个,所以其他两个路线从来都不会发挥作用。 –
雅,我只是想让它工作,所以我加了其他2. –
克里斯是对的。您的路由配置错误。应该从最具体到最不具体的路线排列路线。在这种情况下,最具体的路由是'DefaultAccount'。另外两条路线目前有冲突。您可以通过以下方式使它们更具体:1)在URL中已提供默认值的情况下,使其成为必需2)添加约束以仅在某些情况下匹配3)将文字添加到您的URL以便它们只匹配在某些情况下。请参阅:[ASP.NET路由](https://msdn.microsoft.com/en-us/library/cc668201.aspx)。 – NightOwl888