将AspNet Core添加到标准Dotnet Core控制台应用程序

4

我有一个现有的Dotnet Core 2.0控制台应用程序,它是一个长时间运行的应用程序(直到用户退出)。

我想要添加一个Rest API,并希望使用AspNet Core MVC来实现这一点,但是当我访问http://localhost:5006/api/values时,我只得到一个404错误。Kestrel正在工作并接收请求,但它没有到达我的控制器!

我已经添加了Microsoft.AspNetCore、Microsoft.AspNetCore.Mvc的NuGet包。我还添加了对Microsoft.AspNetCore.All的引用,但这也不起作用,所以我现在已将其删除,因为我不需要所有的臃肿。

我在我的应用程序的静态Main()中调用此方法。

private static void StartWeb()
{
    var host = WebHost
              .CreateDefaultBuilder()
              .UseKestrel()
              .UseStartup<WebStartup>()
              .UseUrls("http://*:5006")
              .Build();
    host.Start();
}

这是WebStartup类

namespace myApp
{
    public class WebStartup
    {
        public IConfiguration Configuration { get; }
        public WebStartup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
        }
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();

        }
    }
}

最后,在Controllers文件夹中,我有一个名为ValuesControler的类。

namespace myApp.Controllers
{
    [Produces("application/json")]
    [Route("api/[controller]")]
    class ValuesController : Controller
    {
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
    }
}
1个回答

7
为了让 ASP.NET Core MVC 识别您的 Controller 类,它们必须声明为public。在您的示例中,您没有指定 ValuesController 是一个公共类 - 而是默认为internal,这就是为什么它没有被识别并导致404错误的原因。
public class ValuesController : Controller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接