Closed
Description
Updating via Nuget from Microsoft.AspNet.WebApi.Versioning 4.0.0 to 4.1.0 results in System.Threading.LockRecursionException
Error is thrown from
System.Web.Http.HttpRequestMessageExtensions.ApiVersionProperties( this HttpRequestMessage request )
System.Threading.LockRecursionException
HResult=0x80131500
Message=Recursive read lock acquisitions not allowed in this mode.
at System.Threading.ReaderWriterLockSlim.TryEnterReadLockCore(TimeoutTracker timeout)
at System.Threading.ReaderWriterLockSlim.TryEnterReadLock(TimeoutTracker timeout)
at System.Web.Routing.RouteCollection.GetReadLock()
at System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase httpContext)
at System.Web.Http.WebHost.Routing.HostedHttpRouteCollection.GetRouteData(HttpRequestMessage request)
at System.Web.Http.HttpRequestMessageExtensions.ApiVersionProperties(HttpRequestMessage request)
at Microsoft.Web.Http.Routing.ApiVersionRouteConstraint.Match(HttpRequestMessage request, IHttpRoute route, String parameterName, IDictionary`2 values, HttpRouteDirection routeDirection)
at System.Web.Http.WebHost.Routing.HttpWebRoute.ProcessConstraint(HttpContextBase httpContext, Object constraint, String parameterName, RouteValueDictionary values, RouteDirection routeDirection)
at System.Web.Routing.Route.ProcessConstraints(HttpContextBase httpContext, RouteValueDictionary values, RouteDirection routeDirection)
at System.Web.Routing.Route.GetRouteData(HttpContextBase httpContext)
at System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext)
configuration is by namespace
DefaultInlineConstraintResolver constraintResolver = new DefaultInlineConstraintResolver()
{
ConstraintMap = {
["apiVersion"] = typeof( ApiVersionRouteConstraint )
}
};
config.MapHttpAttributeRoutes(constraintResolver);
config.AddApiVersioning(options =>
{
options.ReportApiVersions = true;
options.Conventions.Add(new VersionByNamespaceConvention());
});
//Change default route to include api version
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "v{apiVersion}/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { apiVersion = new ApiVersionRouteConstraint() }
);
And not sure its if matters but version is single number
namespace Test.API.Controllers.v1
{
[RoutePrefix("v{version:apiVersion}/GlobalSettings")]
public class GlobalSettingsController : ApiController
{
[HttpGet]
public string GetSetting(string key)
{
return "TEST";
}
}
}