将AspNet Core添加到标准的Dotnet Core Console应用程序

时间:2017-11-28 10:51:52

标签: c# asp.net-core asp.net-core-mvc

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

我想为此添加一个Rest API并希望添加AspNet Core MVC来执行此操作,但是当我访问http://localhost:5006/api/values时,我得到的全部是404,Kestrel正在工作并接收请求但它不是把它交给我的控制器!

我已将NuGet包添加到Microsoft.AspNetCore,Microsoft.AspNetCore.Mvc。我还添加了一个对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 个答案:

答案 0 :(得分:4)

为了使ASP.NET Core MVC能够识别您的Controller类,必须将它们声明为public。在您的示例中,您尚未指定ValuesController是公共类 - 而是默认为internal,这就是为什么它没有被选中并导致404:

public class ValuesController : Controller