【问题标题】:ASP.NET Core console app cannot find controllersASP.NET Core 控制台应用找不到控制器
【发布时间】:2018-06-25 01:23:09
【问题描述】:

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

MyProject.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>

在我的 Program.cs 中:

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

在我的 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();
    }
}

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

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

但我似乎无能为力让它击中我的控制器。 日志显示对 http://localhost:1234/Home/Index 的请求是通过 Kestrel 发出的,但是 404ing。

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

【问题讨论】:

  • 在操作中包含[HttpGet] 或将Route 替换为[HttpGet("Home/Index")],因为不使用视图。最后不应该 Main 是 public
  • 你为什么不从默认项目开始,所有这些都为你包括在内
  • @johnny5 我们需要将其合并到现有项目中;这是一个概念证明。
  • @Nkosi 将[Route("Home/Index")] 更改为[HttpGet("Home/Index")] 或添加[HttpGet] 都没有解决问题;日志仍然显示 404。
  • 你确定 main 被调用了吗?

标签: c# asp.net-core


【解决方案1】:

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

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

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

【讨论】:

    猜你喜欢
    • 2019-02-02
    • 2023-04-08
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多