【发布时间】:2020-04-30 22:39:33
【问题描述】:
我正在使用 Sitecore v9
我的所有控制器都有两个基类,如下所示
public abstract SiteCoreController : ControllerBase, IController, IActionFilter, IAuthenticationFilter, IAuthorizationFilter, IDisposable, IExceptionFilter, IResultFilter, IAsyncController, IAsyncManagerContainer
public abstract class ControllerBase : IController
所有控制器都使用类似的东西
public class MyPageController : SiteCoreController
在我的日志文件中出现大量错误
Sitecore.Mvc.Diagnostics.ControllerCreationException:无法创建 控制器:上下文项是:'/sitecore/content/TEST/home'。这 当前路由 url 是:'{*pathInfo}'。这是默认的 Sitecore 在 'InitializeRoutes' 处理器中设置的路由 “初始化”管道。 ---> Sitecore.Mvc.Diagnostics.ExceptionWrapper: 路径“/”的控制器未找到或未实现 控制器。在 System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext,类型控制器类型)在 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext,字符串控制器名称)在 Sitecore.Mvc.Controllers.SitecoreControllerFactory.CreateController(RequestContext requestContext,字符串控制器名称) --- 内部异常堆栈跟踪结束 --- 在 Sitecore.Mvc.Controllers.SitecoreControllerFactory.CreateController(RequestContext requestContext,字符串控制器名称)在 Sitecore.Mvc.Controllers.ControllerRunner.GetController() 在 Sitecore.Mvc.Controllers.ControllerRunner.Execute() 在 Sitecore.Mvc.Pipelines.Request.RequestBegin.ExecuteFormHandler.ExecuteHandler(字符串 controllerName, String actionName, RequestBeginArgs args) at (Object , 对象 [] ) 在 Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args) 在 Sitecore.Pipelines.DefaultCorePipelineManager.Run(字符串 pipelineName, PipelineArgs args, String pipelineDomain) at Sitecore.Mvc.Pipelines.PipelineService.RunPipeline[TArgs](字符串 pipelineName, TArgs args) 在 Sitecore.Mvc.Routing.RouteHttpHandler.BeginProcessRequest(HttpContext 上下文,AsyncCallback cb,对象 extraData)在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep 步骤) 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤,布尔值& 同步完成)
我的 DI 设置如下
public static void SetupControllers(this IServiceCollection serviceCollection, params Assembly[] assemblyArray)
{
var controllers = GetTypesImplementing<IController>(assemblyArray)
.Where(controller => controller.Name.EndsWith("Controller", StringComparison.Ordinal));
foreach (var x in controllers)
{
serviceCollection.AddTransient(x);
}
var apis = GetTypesImplementing<ApiController>(assemblyArray)
.Where(controller => controller.Name.EndsWith("Controller", StringComparison.Ordinal));
foreach (var x in apis)
{
serviceCollection.AddTransient(x);
}
}
【问题讨论】:
-
显示导致问题的控制器。它有依赖关系吗?他们都正确注册了吗?大多数情况下发生这种情况是因为控制器工厂无法解析控制器的所有必要依赖项。
标签: c# sitecore sitecore-mvc