Closed
Description
Bug occured after the migration to .NET Core 2.0 / ASP .NET Core 2.0.
Adding ApiVersioning with the method
services.AddApiVersioning(o =>
{
o.AssumeDefaultVersionWhenUnspecified = true;
o.DefaultApiVersion = new ApiVersion(1, 0);
});
causes RouteData to be removed from HttpContext's IRoutingFeature
(taken by HttpContext.GetRouteData()
)
The RouteData still exists in ControllerContext
/ActionContext
though.
Reproduction:
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddApiVersioning(o =>
{
o.AssumeDefaultVersionWhenUnspecified = true;
o.DefaultApiVersion = new ApiVersion(1, 0);
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMvc();
}
}
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
public class ValuesController : Controller
{
[HttpGet("/test/{MyValue:int}")]
public string Get()
{
// equals to this.HttpContext.Features.Get<IRoutingFeature>().RouteData;
var fromHttp = this.HttpContext.GetRouteData();
var fromController = this.ControllerContext.RouteData;
if (fromHttp.Values.Count != fromController.Values.Count)
{
throw new Exception("Different RouteData values when taken from HttpContext and ActionContext.");
}
return "VALUE";
}
}
Web Application: netcoreapp2.0
Microsoft.AspNetCore.Mvc.Versioning: 2.0.0-preview2-final
Microsoft.AspNetCore: 2.0.0
Microsoft.AspNetCore.Mvc: 2.0.0
Operating system: Windows 10 Professional 15063.540
IDE: Visual Studio Professional 2017 15.3.2