【问题标题】:Why is ASP.NET Core 6 not discovering controllers when run from another .NET Core app为什么从另一个 .NET Core 应用程序运行时 ASP.NET Core 6 未发现控制器
【发布时间】:2022-09-24 05:38:08
【问题描述】:

我创建了一个开箱即用的 ASP.NET Core 6 Web API 项目。

当我启动项目时,我可以看到 Swagger 已加载,显示了一个在测试时有效的 WeatherForecast 端点。

但是,当我从另一个 .NET Core 应用程序启动 Web API 项目时,没有发现控制器。 Swagger 返回以下消息以供参考。手动调用端点 URL 也会失败。

在对此问题进行一些调查后,我发现如果我手动注册 WeatherForecast 控制器,它将在 Swagger 中可见并在请求时可访问。

为什么从另一个 .NET Core 应用程序运行 ASP.NET 应用程序时未发现 WeatherForecast 控制器?

源代码:GitHub

  • 看起来它只扫描正在执行的程序集并跳过其他程序集,直到您指定一个
  • This answer 涵盖 .NET Core 3;也许它仍然适用于.NET 6?
  • @RichardDeeming 谢谢,是的,它类似于我用来解决该问题的 AddApplicationPart 代码。令人担忧的是,这个问题是在 .NET Core 3 中提出的,但在 .NET Core 6 中仍未得到正确解决。我现在想知道它是有意的设计特征还是 .NET Core 代码中的错误。

标签: c# asp.net asp.net-core asp.net-web-api


【解决方案1】:

你有没有试过这个:

builder.Services.AddMvc()
                .AddApplicationPart(typeof(WeatherForecastController).Assembly)
                .AddControllersAsServices();

【讨论】:

    【解决方案2】:

    使用@RichardDeeming 的answer linked 到@RichardDeeming 我能够让它在.Net 6 中工作。在Program.cs 中找到AddControllers 并将其调整为如下所示(用TestServiceController 替换您的控制器之一目标程序集):

    var assembly = typeof(TestServiceController).Assembly;
    
    builder.Services.AddControllers()
                    .PartManager.ApplicationParts.Add(new AssemblyPart(assembly) );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 2016-04-30
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多