ASP.NET Core 控制台应用程序找不到控制器

Kom*_*een 5 c# asp.net-core

我创建了一个简单的 .NET Core 控制台项目,其中包含 ASP.NET 核心,如下所示:

我的项目.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" />
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

在我的 Program.cs 中:

public class Program
{
    static void Main()
    {
        WebHost.CreateDefaultBuilder()
            .UseKestrel()
            .UseStartup<Startup>()
            .UseUrls("http://localhost:1234")
            .Build()
            .Run();
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的 Startup.cs 中,我有:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseMvc();
    }
}
Run Code Online (Sandbox Code Playgroud)

以及 Controllers 文件夹中的单个控制器:

public class HomeController : Controller
{
    [Route("Home/Index")]
    public IActionResult Index()
    {
        return Ok("Hello from index");
    }
}
Run Code Online (Sandbox Code Playgroud)

但我无能为力似乎使它击中我的控制器。日志显示请求http://localhost:1234/Home/Index来自 Kestrel,但 404ing。

我错过了什么?我也尝试过指定路由,但没有找到控制器。

joh*_*y 5 2

I\xe2\x80\x99m 不确定这是否是原因,但你的 kestrel 使用旧的 1.1 版本,为了使某些进程正常运行,例如依赖于鸭子类型的迁移,你应该声明一个 BuildWebHost 方法:

\n\n
public class Program\n{\n    public static void Main(string[] args)\n    {\n        BuildWebHost(args).Run();\n    }\n\n    public static IWebHost BuildWebHost(string[] args) =>\n        WebHost.CreateDefaultBuilder(args)\n            .UseStartup<Startup>()\n            .Build();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

文档中有\xe2\x80\x99s 更多信息。如果这不起作用,我将创建一个新项目并手动移动内容。我能想到的唯一的其他问题是你的包管理器缓存被搞乱了或者你的机器上安装了太多的运行时

\n