如何修复`无法将Controller转换为Controller Type错误'-ApiController问题

时间:2019-01-10 21:10:39

标签: c# angular asp.net-core ninject .net-core-2.2

我正在创建一个.net核心有角度的网站,并遇到ApiController的运行ApiController(按字母顺序升序排列)的问题,但其他所有都将失败,并显示500错误,要求以下内容:

InvalidCastException: Unable to cast object of type 'AbcController' to type 'AccController'.

lambda_method(Closure , object , object[] )

使用angular和ninject(相关的主要部分)创建.net core 2.2网站。我已经将其设置为与ApiControllers工作的现有项目相同,但是会出现500个错误。我尝试在以下各项之间进行更改:

  • 同时设置为控制器
  • 同时将其设置为ControllerBase
  • 创建一个在BaseController作为Controller的地方都扩展的BaseController
  • 创建一个同时扩展BaseController是ControllerBase的BaseController
  • 在控制器中为ApiController添加/删除的标签
  • 为控制器中的路由添加/删除标签
  • 添加/删除了MVC路径的手动设置
  • 已重新排序的应用。###配置诸如UseStaticFiles()和UseMvc()之类的选项

〜控制器1〜


    [Route("api/[controller]")]
    [ApiController]
    public class AbcController : ControllerBase
    {
        [HttpGet("Get")]
        public IActionResult Get()
        {
            return this.Ok("ABC hello world");
        }
    }

〜控制器2〜


    [Route("api/[controller]")]
    [ApiController]
    public class AccController : ControllerBase
    {
        [HttpGet("Get")]
        public IActionResult Get()
        {
            return this.Ok("ACC hello world");
        }
    }

启动配置方法


    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        Kernel = RegisterApplicationComponents(app, loggerFactory);

        app.Use(async (context, next) => { await next.Invoke(); });
        app.UseHttpsRedirection();
        app.UseSession();
        app.UseMvc();
        app.UseHttpMiddleware();
        app.UseDefaultFiles();
        app.UseStaticFiles();
    }

当前结果,尝试调用api/Abc/Get是有效的响应,结果为200。 尝试调用api/Acc/Get的当前结果为500,并显示完整的错误消息:

An unhandled exception occurred while processing the request.
InvalidCastException: Unable to cast object of type 'AbcController' to type 'AccController'.

1 个答案:

答案 0 :(得分:0)

https://stackoverflow.com/users/2309376/simply-ged提示我检查另外2种方法,并通过一些旧代码重新注册。看起来ninject引起了问题。如上所述,它仅映射了一些控制器。此后,我删除了ninject,转而使用

    services.AddSingleton<ITestService, TestService>();

此后已解决了该问题。