我有一个现有的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" };
}
}
}
答案 0 :(得分:4)
为了使ASP.NET Core MVC能够识别您的Controller
类,必须将它们声明为public
。在您的示例中,您尚未指定ValuesController
是公共类 - 而是默认为internal
,这就是为什么它没有被选中并导致404:
public class ValuesController : Controller