Sitecore 8: ControllerCreationException

Я использую sitecore 8.1, который, по-видимому, также поддерживает Areas. Чтобы запустить POC, я скачал проект sitecore81areas снизу:

https://github.com/LonghornTaco/Sc81Areas

И добавил простой контроллер hello world.

Однако при попытке доступа к элементу sitecore я получаю сообщение об ошибке ниже:

[ExceptionWrapper: The controller for path '/' was not found or does not implement IController.]
[ControllerCreationException: Could not create controller: 'Sc81Areas.Web.Areas.Site1.Controllers.Hello'. 
The context item is: '/sitecore/content/Site1'. 
The current route url is: '{*pathInfo}'. This is the default Sitecore route which is set up in the 'InitializeRoutes' processor of the 'initialize' pipeline. ]
   Sitecore.Mvc.Controllers.SitecoreControllerFactory.CreateController(RequestContext requestContext, String controllerName) +202
   Sitecore.Mvc.Controllers.ControllerRunner.GetController() +23
   Sitecore.Mvc.Controllers.ControllerRunner.Execute() +43
   Sitecore.Mvc.Presentation.ControllerRenderer.Render(TextWriter writer) +134
   Sitecore.Mvc.Pipelines.Response.RenderRendering.ExecuteRenderer.Render(Renderer renderer, TextWriter writer, RenderRenderingArgs args) +30
   Sitecore.Mvc.Pipelines.Response.RenderRendering.ExecuteRenderer.Process(RenderRenderingArgs args) +75
   (Object , Object[] ) +74
   Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args) +484
   Sitecore.Mvc.Pipelines.PipelineService.RunPipeline(String pipelineName, TArgs args) +184
   Sitecore.Mvc.Pipelines.Response.RenderPlaceholder.PerformRendering.Render(String placeholderName, TextWriter writer, RenderPlaceholderArgs args) +216
   (Object , Object[] ) +74
   Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args) +484
   Sitecore.Mvc.Pipelines.PipelineService.RunPipeline(String pipelineName, TArgs args) +184
   Sitecore.Mvc.Helpers.SitecoreHelper.Placeholder(String placeholderName) +259
   ASP._Page_Areas_Site1_Views_Shared_Site1DefaultLayout_cshtml.Execute() in c:\sitecore\sitecore81\Website\Areas\Site1\Views\Shared\Site1DefaultLayout.cshtml:19
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +253
   System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +148
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +122
   System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData) +137
   Sitecore.Mvc.Presentation.ViewRenderer.Render(TextWriter writer) +221
[InvalidOperationException: Error while rendering view: '/Areas/Site1/Views/Shared/Site1DefaultLayout.cshtml' (model: 'Sitecore.Mvc.Presentation.RenderingModel, Sitecore.Mvc').

Я отключил настройки маршрута по умолчанию:

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

Также

  1. добавлена ​​область на макете.
  2. Удалены маршруты по умолчанию в разделе «Регистрация областей».
  3. Добавлена ​​mvcarea на узлы сайта

Тем не менее ошибка сохраняется. Я немного смущен, что именно может быть основной причиной (может быть, настройка конфигурации или DI).

Не уверен, что мой контроллер должен наследоваться от конкретного контроллера sitecore.

Ваша помощь будет высоко оценена.

ОБНОВЛЕНИЕ:

Я хотел поделиться своим кодом, но он слишком большой. По сути, я скачал проект SC81Areas из репозитория ниже и добавил контроллер приветствия:

https://github.com/LonghornTaco/Sc81Areas


person Nil Pun    schedule 26.10.2015    source источник
comment
Вы указали атрибут mvcArea на узле site в конфигурации? Прочтите это сообщение в блоге с пошаговым руководством   -  person jammykam    schedule 26.10.2015
comment
Его там не было, теперь я добавил его и все равно выдает ту же ошибку. Должен ли мой контроллер наследоваться от обычного контроллера или чего-то еще?   -  person Nil Pun    schedule 26.10.2015
comment
Я также обновил свой вопрос выше, указав полную трассировку стека и свои выводы.   -  person Nil Pun    schedule 26.10.2015
comment
Это обычный контроллер, наследование не требуется. Вы добавили класс AreaRegistration в свою папку Areas с правильной строкой AreaName?   -  person jammykam    schedule 26.10.2015
comment
У вашего контроллера есть только пустой конструктор? В противном случае, правильно ли вы настроили внедрение зависимостей?   -  person Chris van de Steeg    schedule 26.10.2015
comment
У меня был непустой конструктор, который я сейчас удалил. Но все равно выдает ту же ошибку. Очень удивлен, что может быть причиной этой проблемы.   -  person Nil Pun    schedule 27.10.2015
comment
@Chris van de Steeg, теперь я обновил свой вопрос, добавив больше деталей.   -  person Nil Pun    schedule 27.10.2015
comment
У вас есть только Sc81Areas.Web.Areas.Site1.Controllers.Hello в поле Controller при рендеринге? Если это так, попробуйте либо полное имя типа с именем сборки (например, Sc81Areas.Web.Areas.Site1.Controllers.HelloController, Sc81Areas.Web), либо просто Hello   -  person Chris van de Steeg    schedule 02.11.2015


Ответы (2)


У меня было такое же сообщение об ошибке с той же трассировкой стека. Моя проблема заключалась в имени контроллера в моем рендеринге контроллера. Я написал это с суффиксом «Контроллер», и это было неправильно.

введите здесь описание изображения

person Igor    schedule 04.04.2016

Поскольку вы говорите, что отключили конфигурацию маршрутизатора по умолчанию, я думаю, вам следует зарегистрировать маршрутизатор, к которому вы обращаетесь через контроллер. пример: youdomain.com/example

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            name: "Example",
            url: "Home/Example",
            defaults: new { controller = "Home", action = "Example" }
        );

        //routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

Пожалуйста, дайте мне знать, если это полезно.

person Ken Nguyen    schedule 27.10.2015
comment
Пробовал, но тоже не получилось. Не совсем уверен, что это связано с маршрутизацией. - person Nil Pun; 27.10.2015
comment
У вас есть элемент Home, например '/sitecore/content/Home'? - person Ken Nguyen; 27.10.2015
comment
Ага. sitecore/content/home/welocome. Там, где приветствуется, есть детали презентации, которые включают рендеринг одного контроллера. Этот рендеринг управления вызывает головную боль. - person Nil Pun; 27.10.2015
comment
Я пропустил важную строку (ControllerCreationException) в трассировке стека, я добавил ее сейчас. - person Nil Pun; 27.10.2015