我更新了一个简单的ASP.NET核心项目,从2.0到2.2,更新引用。该项目(仅)使用具有Route
属性的MVC控制器。
更新后,永远找不到路线。所有HTTP请求最终都有404。
我测试了.SetCompatibilityVersion(...)
的许多组合,没有任何运气。从我可以读到的有关此类更新的内容,我没想到还需要任何其他更改。
我尝试与一个新的" WebAPI"项目进行比较。我看到的唯一区别是启动中没有UseHsts()
和UseHttpsRedirection
,控制器上没有[ApiController]
属性,而从Controller
而不是其基本ControllerBase
派生的控制器。我看不出这是如何解释为什么未调用控制器的,并且会期望所有这些都可以按原样奏效。
控制器:
[Route("/")]
public class RootController : Controller
{
private readonly ILogger _logger;
public RootController(ILogger<RootController> logger)
{
_logger = logger;
}
[HttpGet]
public IActionResult Index()
{
_logger.LogInformation("Ping received!");
return new OkResult();
}
}
启动:
public void ConfigureServices(IServiceCollection services)
{
// Unrelated stuff
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
// More unrelated stuff
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
我应该在哪里看?
编辑:实际上,"Microsoft.AspNetCore.All
实际上从2.0.7(带有2.1个目标框架)更改为项目中没有版本(具有2.2个目标框架)。使用2.0编译和运行时,控制器被调用。
在2.2中与新EndPointRouting功能中的错误相关的路由存在一些问题。这些问题将在3.0中解决,但是在2.2中,您可以通过禁用不需要的新功能解决方法。
services.AddMvc(options => {
options.EnableEndpointRouting = false;
});