Маршрутизация 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)

Как и другие мои сайты, этот настраивается в виртуальном каталоге через Visual Studios. В частности, я установил «Не открывать страницу», «Локальный IIS» с обычным URL-адресом: http://localhost/VIRTUALDIRECTORY

Я нажал «Создать», и это произошло, в IIS есть VIRTUALDIRECTORY с (по крайней мере, кажется) теми же настройками, что и другие мои виртуальные каталоги.

Единственное отличие этой программы от других состоит в том, что я, по сути, копирую программу VB.NET MVC на C#. Поэтому я создал пустую программу C# MVC, затем скопировал и преобразовал классы. Ошибок компиляции (очевидно) нет, но я уверен, что есть настройка или что-то, что я не понял, что вызывает это.

Кто-нибудь еще знает, как это решить?

Я ссылаюсь на последнюю версию MVC (5.2.3) через nuget.


person Jesse Sierks    schedule 23.03.2016    source источник
comment
Вероятно, это не ваша проблема, но маршрут по умолчанию обрабатывает все, что делают дополнительные два. Кроме того, поскольку маршрут по умолчанию является первым, два других в любом случае даже не вступают в игру.   -  person Chris Pratt    schedule 23.03.2016
comment
Да, я просто пытался заставить его работать, поэтому добавил еще 2.   -  person Jesse Sierks    schedule 23.03.2016
comment
Крис прав. Ваша маршрутизация настроена неправильно. Маршруты должны быть упорядочены от наиболее конкретных к наименее конкретным. В этом случае наиболее конкретным маршрутом будет DefaultAccount. Два других маршрута в настоящее время конфликтуют. Вы можете сделать их более конкретными: 1) удалить значения по умолчанию в тех случаях, когда они уже указаны в URL-адресе, сделав их обязательными 2) добавить ограничение для совпадения только в определенных случаях 3) добавить литералы к вашим URL-адресам, чтобы они совпадали только в определенных случаях. См. раздел Маршрутизация ASP.NET.   -  person NightOwl888    schedule 23.03.2016


Ответы (1)


Не уверен, что это применимо к кому-то еще или нет, но проблема была в коде болвана с моей стороны.

Я разделил свой контроллер на несколько «частичных» классов, и в процессе преобразования кода ни один из них не был помечен как «общедоступный».

Дох!

person Jesse Sierks    schedule 06.04.2016