Skip to content

Adding ApiVersioning causes RouteData to be cleared in HttpContext's IRoutingFeature #176

Closed
@maciejjarzynski

Description

@maciejjarzynski

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

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions