路由不适用于自托管的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)