路由不适用于自托管的Web API

这基本上就是我所拥有的,一个非常简单的三个文件集,带有新的asp.net核心2.1(实际上是从教程中复制粘贴):

public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup(); } 

然后是最简单的启动

 class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddMvc(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseMvc(); } } 

和默认值控制器

 [Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { [HttpGet] public ActionResult<IEnumerable> Get() { return new string[] { "value1", "value2" }; } } 

不管我叫什么,我在控制台看到同样的404错误:

 Application started. Press Ctrl+C to shut down. info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1] Request starting HTTP/1.1 GET http://localhost:5000/values info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2] Request finished in 105.0181ms 404 info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1] Request starting HTTP/1.1 GET http://localhost:5000/api/values info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2] Request finished in 2.6016ms 404 etc 

我尝试使用app.UseMvcWithDefaultRoute();添加默认路由app.UseMvcWithDefaultRoute(); 并手动指定它。 我在使用默认路由时尝试删除路由属性。 还尝试添加AddControllersAsServices() 。 但结果仍然相同 – 404.当我在app.Run设置自定义处理程序时,它可以正常工作。


csproj(我已经替换了默认的Microsoft.AspNetCore.All依赖项,但路由仍然不起作用)

   Exe netcoreapp2.1      

这很难追查,但问题归结为你的.csproj:

  

在构建Web应用程序时,需要引用Web Sdk,如下所示:

  

我设法通过这个小改动重现并解决了你的问题。

您可以尝试将代码更改为:

 [ApiController] public class ValuesController : ControllerBase { [HttpGet] [Route("api/values")] public ActionResult> Get() { return new string[] { "value1", "value2" }; } } 

属性路由可用于将特定路由指向api或视图上的函数。

那么打电话你可以使用:

‘本地主机:5000 / API /值’

对我来说,这有助于在AddApplicationPart之后添加AddApplicationPart ,如下所示:

 .AddMvc() .AddApplicationPart(typeof(Startup).Assembly)